Créer une taille fixe std::vector et d'écrire sur les éléments

En C++ je souhaite allouer une taille fixe (mais la taille a été déterminée au moment de l'exécution) std::vector puis écrire les éléments de ce vecteur. C'est le code, je suis en utilisant:

int b = 30;
const std::vector<int> test(b);
int &a = test[3];

Cependant, ce qui me donne un compilateur (MSVC 2010 Pro) erreur:

error C2440: 'initialisation' : impossible de convertir de 'const int' int &". Conversion perd qualificatifs.

Ma compréhension de const, c'est qu'il fait toutes les variables membres d'une constante de classe. Pour exemple, le code suivant fonctionne:

class myvec
{
public:
    myvec(int num) : ptr_m(new int[num]) {};
    ~myvec() { delete ptr_m; }
    void resize(int num) { delete ptr_m; ptr_m = new int[num]; }
    int & operator[] (int i) const { return ptr_m[i]; }
    int *ptr_m;
};

const myvec test(30);
int &a = test[3]; //This is fine, as desired
test.resize(10); //Error here, as expected

Il semble donc que les std::vector propage la const-ness du conteneur pour les éléments du vecteur, ce qui semble étrange parce que si j'avais voulu les éléments à prendre en const, j'aurais utilisé std::vector<const int>. Ce qui me frappe comme une lacune de std::vector.

En tout cas, comment puis-je créer un std::vector, dont la taille ne peut être modifiée après la construction, mais dont les éléments peuvent être écrites?

Créer la variable a d'abord, puis de faire votre dernière ligne.
Puis a n'est pas une référence. L'erreur est due à avoir une écriture référence à un élément du vecteur, ce qui est exactement ce que je veux.
Vous devez essayer d'utiliser un std::vector<const int>... voir ce qui se passe

OriginalL'auteur user664303 | 2013-04-05