复制2d矢量的最佳方法是什么?

Fan*_*Fox 4 c++ copy vector multidimensional-array

说我有以下场景:

std::vector<std::vector<double>> v(6, std::vector<double>(6, 0.0));
std::vector<std::vector<double>> y;

for (const std::vector<double> &p : v) {
    y.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)

这是采取的深层副本v进入y.有没有办法std::copy2D矢量上执行此操作.

std::copy(v.begin(), v.end(), y.begin())
Run Code Online (Sandbox Code Playgroud)

不管用.奖励积分可以扩展到ND矢量案例吗?这似乎很重要,以避免以下循环N:

...
for (const std::vector<std::vector<<double>> &p : v) {
    for (const std::vector<double> &q : p) {
        ...
Run Code Online (Sandbox Code Playgroud)

我知道性能明智没有区别,因为这是如何std::copy实现的.只是想知道代码紧凑性.

bil*_*llz 9

将STL容器复制到另一个容器的好习惯是:copy construct.代码应该更快,异常安全.

例如:

auto y(v);
Run Code Online (Sandbox Code Playgroud)

如果y已创建,请使用vector::insert

y.insert(y.end(), v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)

要么

y = v;
Run Code Online (Sandbox Code Playgroud)


vso*_*tco 5

如果y没有预先分配内存,简单的复制std::begin(y)将导致未定义的行为。对于 2D 向量,您可以std::copyback_inserterfrom一起使用<iterator>,例如

std::copy(v.begin(), v.end(), back_inserter(y));
Run Code Online (Sandbox Code Playgroud)