Тип элементов вектора. С++

109
18 августа 2019, 02:20

std::vector<type> насколько я понимаю , написав определенный type, то элементами моего вектора могут быть только этого типа. А можно ли сделать так , чтобы элементы вектора(в одном и том же векторе)были разного типа. Например флоат и целочисленные?

Answer 1

Можно воспользоватся std::variant: std::vector<std::variant<type1,type2>>.

std::vector <std::variant<int, float>> vec {1,4.5f,45,4.9f};
std::cout << std::get<int>(vec[0]) << " - " << std::get<float>(vec[1]) 
<< " - " << std::get<int>(vec[2]) << " - " << std::get<float>(vec[3]);
Answer 2

По любому вектор должен содержать обьекты одного типа. std::vector<type> является оберткой для массива, хранящийся type, знающий размер этого массива, имеющий функциональности. Другое дело, что этот самый type может быть типом, указанным от пользователья mrFieldy или другим подобным. Или же он может быть типом указателем. В таком случаи он может принимать значение адреса любого обьекта типа, чей указатель может неявно преобразится в type*. Например:

struct Type1 {
    float f;
    Type1(float k = .0f) : f(k) {}
};
struct Type2 : Type1 {
    Type2(int i = 0) : Type1(i){}
};

Так как Type2 является наследником структуры Type1(строится на ее основе), то Type1* может указывать и на обьекты Type2. Поэтому мы можем спокойно записать такую программу:

vector<Type1*> v;
Type1 fn = 0.4;
Type2 in = 3;
v.push_back(&fn);
v.push_back(&in);
cout << v[0]->f << '\t' << v[1]->f;
READ ALSO
C# получить время кадра любого приложения, использующего GPU

C# получить время кадра любого приложения, использующего GPU

Хочу написать программу, которая будет проверять частоту кадров любого приложенияМоей целью является залогировать FPS и время каждого кадра

99
Как пользоваться Drools standalone?

Как пользоваться Drools standalone?

Кто пользовался процессором правил Drools? Из того, что я прочитал - это набор ява-библиотек, которые интегрируются в проектПосле чего можно...

124
Где найти библиотеку FileUtils

Где найти библиотеку FileUtils

Пишу автоматизационный тест, суть такова: открыть приложение, нажать на список городов, сделать скриншот

133