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

时间:2014-07-30 00:19:47

标签: c++ vector copy 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);
}

这会将v的深层副本复制到y。有没有办法在std::copy向量上使用2D执行此操作。

std::copy(v.begin(), v.end(), y.begin())

不起作用。对于奖励积分,这可以扩展到ND矢量案例吗?这对于避免以下N深的循环似乎很重要:

...
for (const std::vector<std::vector<<double>> &p : v) {
    for (const std::vector<double> &q : p) {
        ...

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

2 个答案:

答案 0 :(得分:9)

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

例如:

auto y(v);

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

y.insert(y.end(), v.begin(), v.end());

y = v;

答案 1 :(得分:2)

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

std::copy(v.begin(), v.end(), back_inserter(y));