C ++复制多维向量(C++ copying multidimensional vector)

2019-10-17 10:13发布

我有复制多维向量的问题,我已经尝试了很多东西,但是这是最后一个:

vector < vector < int > > a;
vector < vector < int > > b;
a.resize(10);
b.resize(10);
a[0][0] = 123;
copy( a.begin(), a.end(), back_inserter(b) );
cout << b[0][0];

我试图做一个递归循环计数在10个移动一格的所有可能的途径。 我试图创建一个名为向量current_path这将保持当前路径每个递归,当current_path有10个动作,它会从复制数据current_pathall_paths

网格是这样的:

0  1  2 3
4  5  6 7
8  9  10 11
12 13 14 15

只能移动到所触摸的正方形,从而从0可以移动到1,4和5和1至3,4,5,6等

其主要思想是将复制current_path到下一个函数调用(递归),所以它会保持curren_path到这一点,这样做,直到它满(10级)。 它是从复制后current_pathall_paths我想我已经删除了current_path

我知道如何有效地计算所有步骤,但我有复制麻烦current_path和propably以及如何将添加current_pathall_paths当我在10级?

Answer 1:

有你的代码的几个问题。 由线4的端部,则有两种载体,每个含有10个空矢量。 你可以想象这样的:

a = {{}, {}, {}, {}, {}, {}, {}, {}, {}, {}}
b = {{}, {}, {}, {}, {}, {}, {}, {}, {}, {}}

这些内部媒介仍没有任何元素,因此,当您尝试并设置a[0][0]123 ,你所访问不存在,调用未定义行为的元素。

如果工作过,您使用std::copy只会每个向量从复制a ,并将其推到后面b 。 由于b已经有10个元素,它现在将有20个元素。

然后尝试输出b[0][0]如不存在一样多a[0][0]确实没有。

这里的解决方案是简单地使用由定义的拷贝赋值运算符std::vector

vector<vector<int>> a = {{1, 2, 3}, {4, 5}};
vector<vector<int>> b;
b = a;


Answer 2:

你可以做b = a;

std::vector定义了一个拷贝赋值运算符 ,其确实的元素单元的副本。 这将调用内载体,其复制的拷贝赋值运算符int秒。

代替

a.resize(10);
a[0][0] = 123;

你会想要做的

a.resize(10);
a[0].push_back(123);

因为而resize创建在外矢量10个新载体,这些内向量具有长度为0,这样a[0][0]会给你一个元件一个过去的第一内矢量的末端。

另外,只要你在栈上创建的载体(如你所做的),你将不再需要删除任何文件; 他们有自动存储时间 。



Answer 3:

这里是你的代码的固定版本:

vector < vector < int > > a;
vector < vector < int > > b;
a.resize(10, vector < int >(10));
b.resize(10, vector < int >(10));
a[0][0] = 123;
b = a;
cout << b[0][0];


文章来源: C++ copying multidimensional vector