我有一个由Eclipse开发的程序。
这是一个如下代码。
class VectorClass
{
private:
vector<string> VectorTest;
public:
VectorClass()
{
VectorTest[0] = "TEST1";
VectorTest[1] = "TEST2";
VectorTest[2] = "TEST3";
}
};
当您编写这样的代码时,我在调试时会收到以下错误。
No source available for "std::basic_string<char, std::char_traits<char>,
std::allocator<char> >::assign() at 0x3e0009dfd6"
所以,我更改了以下代码。
class VectorClass
{
private:
vector<string> *VectorTest;
public:
VectorClass()
{
VectorTest = new vector<string>;
VectorTest->at(0) = "TEST1";
VectorTest->at(1) = "TEST2";
VectorTest->at(2) = "TEST3";
}
};
然后就变成了这样一个错误。
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
我接受了检查,但我不知道原因。
使用是否错误。
感谢阅读。
答案 0 :(得分:0)
在所有情况下,向量都不像数组一样工作。数组具有固定大小,向量可以增长和缩小。因此,虽然您可以使用operator[]
将元素分配给数组,但不能使用它来访问超出当前大小的向量元素。
您需要先使用push_back()
将元素放入向量中,然后使用operator[]
来访问/分配这些元素。 (您还可以定义具有特定大小的矢量。)
以下代码应该有效:
VectorTest.push_back(string("TEST1"));
VectorTest[0] = "Change TEST1";
这里的区别在于push_back()
之后,vector有一个元素,所以你现在可以访问位置0的元素。
答案 1 :(得分:0)
顺便说一句,我试图在矢量变量中嵌套。
因此,我认为代码如下。
class VectorClass
{
private:
vector< vector<string> > *VectorTest;
public:
VectorClass()
{
VectorTest = new vector< vector<string> >(20);
VectorTest->at(0) = new vector<string>(20);
VectorTest->at(0)->at(0) = "TEST1";
VectorTest->at(0)->at(1) = "TEST2";
VectorTest->at(0)->at(2) = "TEST3";
}
};
但是,你无法在此成功编译。
为了实现这项业务应该采取任何方式吗?
感谢阅读。