C++ では、固定サイズ (ただし、サイズは実行時に決定されます) の std::vector を割り当ててから、この vector の要素に書き込みます。これは私が使用しているコードです:
int b = 30;
const std::vector<int> test(b);
int &a = test[3];
ただし、これによりコンパイラ (MSVC 2010 Pro) エラーが発生します。
エラー C2440: '初期化中': 'const int' から 'int &' に変換できません。コンバージョンは修飾子を失います。
const についての私の理解は、クラスのすべてのメンバー変数を定数にするということです。たとえば、次のようにするとうまくいきます。
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
したがって、 std::vector はコンテナーの const ネスをベクターの要素に伝播するように見えますが、要素を const にしたい場合は を使用していたので、これは奇妙に思えstd::vector<const int>
ます。したがって、これは std::vector の欠点だと思います。
いずれにせよ、構築後にサイズを変更できないが、要素を書き込むことができる std::vector を作成するにはどうすればよいですか?