std::vector<type> насколько я понимаю , написав определенный type, то элементами моего вектора могут быть только этого типа. А можно ли сделать так , чтобы элементы вектора(в одном и том же векторе)были разного типа. Например флоат и целочисленные?
Можно воспользоватся 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]);
По любому вектор должен содержать обьекты одного типа. 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;
Сборка персонального компьютера от Artline: умный выбор для современных пользователей