Comment initialiser un vecteur en C++ [dupliquer]
possible Duplicate:
C++: la façon la plus facile d'initialiser un vecteur STL avec des éléments codés en dur
je veux initialiser un vecteur comme nous le faisons dans le cas d'un tableau.
exemple
int vv[2] = {12, 43};
mais quand je le fais comme ça,
vector<int> v(2) = {34, 23};
ou
vector<int> v(2);
v = {0, 9};
il donne une erreur:
principale expression attendue avant ' {'token
et
erreur:‘, ’ or ‘;’ before ‘=’ token
respectivement.
2 réponses
avec le nouveau standard C++ (il peut être nécessaire d'activer des options spéciales sur votre compilateur) vous pouvez simplement faire:
std::vector<int> v { 34,23 };
// or
// std::vector<int> v = { 34,23 };
ou même:
std::vector<int> v(2);
v = { 34,23 };
sur les compilateurs qui ne supportent pas cette fonctionnalité (listes initialiseur) pourtant vous pouvez l'émuler avec un tableau:
int vv[2] = { 12,43 };
std::vector<int> v(&vv[0], &vv[0]+2);
ou, dans le cas d'une affectation à un vecteur existant:
int vv[2] = { 12,43 };
v.assign(&vv[0], &vv[0]+2);
comme L'a suggéré James Kanze, il est plus robuste pour avoir les fonctions qui vous donnent le début et la fin d'un tableau:
template <typename T, size_t N>
T* begin(T(&arr)[N]) { return &arr[0]; }
template <typename T, size_t N>
T* end(T(&arr)[N]) { return &arr[0]+N; }
Et alors vous pouvez le faire sans avoir à répéter la taille partout:
int vv[] = { 12,43 };
std::vector<int> v(begin(vv), end(vv));
, Vous pouvez aussi faire comme ceci:
template <typename T>
class make_vector {
public:
typedef make_vector<T> my_type;
my_type& operator<< (const T& val) {
data_.push_back(val);
return *this;
}
operator std::vector<T>() const {
return data_;
}
private:
std::vector<T> data_;
};
et l'utiliser comme ceci:
std::vector<int> v = make_vector<int>() << 1 << 2 << 3;