我有复制多维向量的问题,我已经尝试了很多东西,但是这是最后一个:
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_path
到all_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_path
到all_paths
我想我已经删除了current_path
?
我知道如何有效地计算所有步骤,但我有复制麻烦current_path
和propably以及如何将添加current_path
到all_paths
当我在10级?
有你的代码的几个问题。 由线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;
你可以做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]
会给你一个元件一个过去的第一内矢量的末端。
另外,只要你在栈上创建的载体(如你所做的),你将不再需要删除任何文件; 他们有自动存储时间 。
这里是你的代码的固定版本:
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];