为什么加入两个向量根本不起作用?

时间:2012-10-23 22:58:00

标签: c++ visual-studio-2010 vector

我有两个MyObj结构向量。 MyObj的定义如下:

struct MyObj
{
   float x, y;
   unsigned int data[8];
   unsigned int tmp[1];

   MyObj(const MyObj &m) 
   {
      x = m.x; y = m.y; 
      tmp[0] = 0;
      for (int i = 0; i < 8; ++i)
      {
         data[i] = m.data[i];
      }
   }
};

然后我有两个载体......

vector<MyObj> v1; 
vector<MyObj> v2;
// both get data eventually.

v1.insert(v1.end(), v2.begin(), v2.end());

v2在我的实验中有3535004个元素。 v1的大小相似。我也尝试构建一个新的向量,并使用.push_back从两个向量构建它。

基本上,当我尝试合并这两个向量时,我只是从visual studio得到一个错误,说“调试错误!R6010,abort()已被调用”。非常无用......

所以我的问题是:可能导致此错误的原因是什么,我该如何解决?谢谢

1 个答案:

答案 0 :(得分:3)

vtext.cpp:

#include <vector>
#include <iostream>
using namespace std;

struct MyObj
{
   float x, y;
   unsigned int data[8];
   unsigned int tmp[1];

   MyObj() {}
   MyObj(const MyObj &m) 
   {
      x = m.x; y = m.y; 
      tmp[0] = 0;
      for (int i = 0; i < 8; ++i)
      {
         data[i] = m.data[i];
      }
   }
};

int main(void)
{
    vector<MyObj> v1(3535004); 
    vector<MyObj> v2(3535004);
    // both get data eventually.

    v1.reserve(3535004 + 3535004);

    cout << v1.capacity() << endl;

    v1.insert(v1.end(), v2.begin(), v2.end());

    cout << "It worked" << endl;
}
  

$ g ++ vtest.cpp -o vtest

     

$ ./vtest

     

7070008

     

有效

它使用和不使用reserve语句。要么你正在使用一个非常低的内存系统(我有4GB),要么错误是你没有给我们看过的。

编辑:关注@ MooingDuck在评论中暗示的建议,如果您仍有问题,请用

替换上面的insert声明
try 
{
        v1.insert(v1.end(), v2.begin(), v2.end());
}
catch (exception& e)
{
   cout << e.what() << endl;
}

从那里拿走它。另外在顶部添加#include <exception>