Trong C++, tôi muốn phân bổ kích thước cố định (nhưng kích thước được xác định khi chạy) std :: vector rồi ghi vào các phần tử trong vectơ này. Đây là mã tôi đang sử dụng:Tạo một kích thước cố định std :: vector và ghi vào các phần tử
int b = 30;
const std::vector<int> test(b);
int &a = test[3];
Tuy nhiên, điều này mang lại cho tôi một trình biên dịch (MSVC 2010 Pro) lỗi:
error C2440: 'initializing' : cannot convert from 'const int' to 'int &'. Conversion loses qualifiers.
sự hiểu biết của tôi về const là nó làm cho tất cả các biến thành viên của một hằng số lớp. Ví dụ, sau đây hoạt động tốt:
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
Nó sẽ do đó dường như rằng std :: vector truyền const-Ness của các container để các yếu tố của véc tơ, mà có vẻ kỳ lạ bởi vì nếu tôi đã muốn các yếu tố để be const Tôi đã sử dụng std::vector<const int>
. Điều này do đó tấn công tôi như một thiếu sót của std :: vector.
Trong mọi trường hợp, làm cách nào để tạo một std :: vector có kích thước không thể thay đổi sau khi xây dựng, nhưng có thể ghi phần tử nào?
Tạo biến 'a' trước, sau đó thực hiện dòng cuối cùng của bạn. –
@GamesBrainiac: Sau đó 'a' không phải là tham chiếu. Lỗi này là do có một tham chiếu có thể ghi tới một phần tử trong vectơ, đó chính xác là những gì tôi muốn. – user664303
Bạn nên thử sử dụng 'std :: vector' ... xem điều gì xảy ra –