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::copy在2D矢量上执行此操作.
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实现的.只是想知道代码紧凑性.
将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)
如果y没有预先分配内存,简单的复制std::begin(y)将导致未定义的行为。对于 2D 向量,您可以std::copy与back_inserterfrom一起使用<iterator>,例如
std::copy(v.begin(), v.end(), back_inserter(y));
Run Code Online (Sandbox Code Playgroud)