【问题标题】:Array of Vectors C++ - curious behaviour when adding elements向量数组 C++ - 添加元素时的奇怪行为
【发布时间】:2012-12-05 17:14:14
【问题描述】:

google 和 stackoverflow 搜索都帮不了我,我只好向你们寻求帮助。

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

vector<double> testVect[1];

现在,当我想将一个元素添加到我使用的数组中包含的第一个向量时

testVect[0].push_back(0);

到目前为止,一切似乎都还不错 - 不幸的是,向第一个向量添加一个元素也会以某种方式也将相同的元素(在本例中为 0)添加到第二个向量。

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

【问题讨论】:

  • vector&lt;double&gt; testVect[1]; 只生成一个向量。它是一个向量数组,最大索引为0。是什么让您认为存在第二个元素,或者它也会受到 push_back 的影响?
  • 我混淆了初始化向量和访问它的元素。在 c++ 中,向量元素开始计数为 0。因此,如果一个向量包含 2 个元素,您将通过向量 [0] 访问第一个元素。这就是为什么我认为编写 testVect[1] 会产生一个包含两个向量的数组。谢谢你:)
  • 再次被否决 - 这一次没有明显的原因......有时人们会感到困惑。
  • 我猜原因是因为他们认为这个问题“没有得到很好的研究”。不确定我是否同意。
  • 我确实首先研究了我的问题!不幸的是,我什至没有想到我只使用 1 elemt 数组,因为似乎禁用了警告。在我的部门中,我是唯一一个编写 C++ 代码的人,这是我的第一个项目。我经常阅读stackoverflow“文章”,你们已经被动地帮助了我很多

标签: c++ arrays vector


【解决方案1】:

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

 vector<double> testVect[2];

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

你应该在你的编译器上启用所有警告。

顺便说一句,您可以安装最新的 Linux 发行版,使用最新的 GCC 编译器(例如 4.7),并以 g++ -Wall -g 运行它,如果您静态访问 testVect 越界,它肯定会警告您,喜欢它好像有过。

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

【讨论】:

  • hmm 我没有开放客户端,无法安装任何软件,除非先请求 IT 部门允许 :( 仍然感谢您的建议 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 2020-01-11
  • 2016-05-22
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多