cout << sqrt(n) << endl;
endl
. После каждого вычисления вы зачем-то сбрасываете поток вместо того, чтоб просто вывести символ перевода на новую строку '\n'
.math.h
, а в C++ - cmath
. И зачем вы используете while вместо for?#include <cstdint>
...
for (uint64_t i = 0; i < UINT64_MAX; ++i)
#include <iostream>
#include <sstream>
#include <string>
#include <thread>
#include <mutex>
#include <chrono>
#include <cmath>
#include <cstdint>
using namespace std;
mutex ios_mutex;
void compute(int b, int e)
{
stringstream buffer;
for (uint64_t i = b; i < e; ++i)
{
buffer << sqrt(i) << '\n';
}
ios_mutex.lock();
cout << buffer.str();
ios_mutex.unlock();
}
int main(int argc, char** argv)
{
thread t0(compute, 0, 99);
thread t1(compute, 100, 199);
thread t2(compute, 200, 299);
thread t3(compute, 300, 399);
thread t4(compute, 400, 499);
thread t5(compute, 500, 599);
thread t6(compute, 600, 699);
thread t7(compute, 700, 799);
t0.join();
t1.join();
t2.join();
t3.join();
t4.join();
t5.join();
t6.join();
t7.join();
return 0;
}
Она должна превращать такие числа 0.475 в такие 475
Вот так делать - это нормально?Вполне
И что в таком случае возвращается, указатель на функцию или сама функция?Функциональный объект. Лямбда — не функция, она может быть приведена к указателю на функцию в некоторых случаях.
Если возвращается указатель, то где хранится сама функция, в куче или стеке?«Функция» лямбды хранится там же, где и остальной код. На лету ничего не собирается и не компилируется. Лямбда это синтаксический сахар для объявления класса с перегруженым оператором вызова функции.
И еще один вопрос, по этой же теме:lambda имеет уникальный тип. Это не функция (но может быть приведена к ней в данном случае).
Это сокращенная запись вот такой конструкции:
Или что то другое?
Вообще не нашел адекватной сборки.В этом и проблема. Вы ищите какие-то левые сборки с кряками, но на официальный сайт даже не удосужились зайти.
Компилятор не работает, отладка не работает, нихера не работает. Бомбит. А отзывы-то хорошие.Всё работает. Нужно не бомбить, а читать документацию.
Аналогично: компилятор не компилируется.Вы даже не понимаете, что должно происходить.
bool* nptr = new bool;
Что является результатом данной строки
И как производить обращение к элементам, в таком случае?
list<vector<string>> lvs {{"Hello", "World"}, {"Goodbye", "Universe"}, {"What", "am", "I", "doing"}};
for(auto it = list.cbegin(), it != list.cend(), ++it) {//Проходимся по всем элементам списка
cout << (*it)[1] << '\n';
// (*it) даст элемент списка: vector<string>
// Пы можем обратиться к элементу вектора при помощи оператора []
}
class B {
public:
virtual void f() {}
...
}
class D: public B{
public:
void f(){}
...
}
...
doF(D());
...
void doF(const B& b){
b.f();// вызовется D::f()
}
B *d = new D();
delete d;
вы вызовете только деструктор базового класса. struct base
{};
struct derived: base
{};
//...
derived* d = new derived;
//Работает, безопасно
base* b = static_cast<base*>(d);
//Работает, безопасно так как b на самом деле указывает на derived
d = static_cast<derived*>(b);
b = new base;
//Undefined Behavior. Программа превращается в тыкву.
d = static_cast<derived*>(b);
поля объявленные в производном классе исчезают?
Base&
) таких проблем не будет, однако ссылка сама по себе переменной не является (в отличие от указателя) - это лишь дополнительное ИМЯ для некоторой другой переменной или области памяти. Поэтому, вы не сможете сохранить ссылку в векторе - ваш код не скомпилируется. В векторе вам нужно будет хранить указатели. Например, std::vector<Base*>
.#include <iostream>
#include <memory>
class Strategy {
public:
virtual void doAction() = 0;
};
class FirstStrategy : public Strategy{
public:
void doAction() override {
std::cout << "First" << std::endl;
}
};
class SecondStrategy : public Strategy{
public:
void doAction() override {
std::cout << "Second" << std::endl;
}
};
class A {
std::shared_ptr<Strategy> behavior;
public:
void setBehavior(std::shared_ptr<Strategy> b) {
behavior = b;
}
void doBehavior() {
behavior->doAction();
}
};
int main() {
A a;
a.setBehavior(std::make_shared<FirstStrategy>());
a.doBehavior();
a.setBehavior(std::make_shared<SecondStrategy>());
a.doBehavior();
return 0;
}