2012-12-05 174 views
8

对于谷歌和stackoverflow搜索无法帮助我我别无选择,只能问你们帮忙。向量数组C++ - 向添加元素添加元素时的好奇行为

我想使用一个向量数组 - 我知道这个数组只包含两个向量。因此

vector<double> testVect[1]; 

现在,当我想要的元素添加到阵列中包含我使用的第一个矢量

testVect[0].push_back(0); 

到目前为止,一切似乎确定 - 不幸的是添加元素的第一个向量在某种程度上也增加了同样的元素(在这种情况下是0)也是第二个向量。

有人能告诉我这种行为的原因吗? (请) - 也许是一种解决方法。 目前我有使用Visual Studio 6(雇主将不会安装新的编译器 - 我已经激怒了我的同事:d

+3

'vector testVect [1];'只做一个向量。它是一个向量的数组,最大索引为'0'。是什么让你觉得还有第二个元素,或者它也会受到push_back的影响? –

+0

我混淆了初始化一个向量并访问它的元素。在C++中,开始用0计算向量元素。因此,如果一个向量包含2个元素,您将通过向量[0]访问第一个元素。这就是为什么我认为写testVect [1]会产生两个向量的数组。谢谢:) –

+0

再次被低估 - 这一次没有明显的原因...有时候人们会感到困惑。 –

回答

16

如果你想两个向量,你应该声明:

vector<double> testVect[2]; 

然后在代码中使用testVect[0]testVect[1]

你应该让你的编译器的所有警告。

顺便说一句,你可以安装一个最近的Linux发行版,与最近的GCC编译器(例如, 4.7),并运行它为g++ -Wall -g它肯定会警告你,如果你静态访问testVect越界,就好像你已经有了。

GNU/Linux和GCC都是免费的,所以你的经理可能会很开心。

+0

大声笑很好的抓住! –

+0

嗯我没有开放的客户端,不能安装任何软件没有乞求IT部门先允许它:(仍然感谢您的建议:) –

+0

okey启用所有警告是有道理的 - 再次感谢 –