C++ 将`std::copy()`与`std::back_inserter()一起使用`

C++ 将`std::copy()`与`std::back_inserter()一起使用`,c++,c++11,copy,std,C++,C++11,Copy,Std,我有两个A类和B类,都有一个成员,如下所示: class A { ... std::vector<std::vector<std::vector<size_t>>> grid; } class B { ... std::vector<std::vector<std::vector<size_t>>> grid; } 但如果我删除了初始化部分,那么std::copy就可以正常工作。 初始化部分出了什么问题?

我有两个A类和B类,都有一个成员,如下所示:

class A {
  ...
  std::vector<std::vector<std::vector<size_t>>> grid;
}

class B {
  ...
  std::vector<std::vector<std::vector<size_t>>> grid;
}
但如果我删除了初始化部分,那么std::copy就可以正常工作。
初始化部分出了什么问题?

让我用一个简化的示例演示一下

std::vector<int> v = {1, 2, 3};
std::vector<int> v1;
std::copy(v.begin(), v.end(), std::back_inserter(v1));

v1是1,2,3,正如预期的那样。

谢谢你的回答,我真的很困惑。我可以再问一个问题吗?修改网格[I][j]时保留(a.grid[I][j].size());到网格[i][j]。调整大小(a.grid[i][j]。size());使用背部插入器,也可以正常工作。保留和调整大小的区别是什么?我知道reserver只是保留一个缓冲区,resize将初始化该值。但为什么调整大小会正确工作?@Josper:我不认为你对grid[I][j]所做的任何事情都会产生任何影响,不管它是不是调整了保留大小。重要的是你是否自己调整网格的大小,你到底为什么不简单地做
grid=a.grid?@T.C.,我还尝试使用运算符=(),它工作正常。我只想知道我使用std::copy:)时出了什么问题
std::vector<int> v = {1, 2, 3};
std::vector<int> v1;
std::copy(v.begin(), v.end(), std::back_inserter(v1));
std::vector<int> v = {1, 2, 3};
std::vector<int> v1(3); //v1 has initial size!!
std::copy(v.begin(), v.end(), std::back_inserter(v1));
std::vector<int> v = {1, 2, 3};
std::vector<int> v1(3); //v1 has initial size!!
std::copy(v.begin(), v.end(), v1.begin()); //use begin here