C++复制多维向量

uns*_*ska 1 c++ copy vector multidimensional-array

我在复制多维向量时遇到问题,我尝试了很多东西,但这是最后一个:

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];
Run Code Online (Sandbox Code Playgroud)

我正在尝试做一个递归循环,在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
Run Code Online (Sandbox Code Playgroud)

你只能移动到你触摸的方格,从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级?

Jos*_*eld 9

您的代码存在一些问题.在第4行的末尾,你有两个向量,每个向量包含10个空向量.您可以将其可视化为:

a = {{}, {}, {}, {}, {}, {}, {}, {}, {}, {}}
b = {{}, {}, {}, {}, {}, {}, {}, {}, {}, {}}
Run Code Online (Sandbox Code Playgroud)

那些内部向量仍然没有任何元素,所以当你尝试设置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;
Run Code Online (Sandbox Code Playgroud)


Dan*_*Dan 6

你可以这样做 b = a;

std::vector定义一个复制赋值运算符,它执行元素复制.这将调用内部向量的复制赋值运算符,该运算符复制ints.

代替

a.resize(10);
a[0][0] = 123;
Run Code Online (Sandbox Code Playgroud)

你会想做的

a.resize(10);
a[0].push_back(123);
Run Code Online (Sandbox Code Playgroud)

因为虽然resize在外部向量中创建了10个新向量,但这些内向量的长度为0,因此do a[0][0]会给出一个超过第一个内向量末尾的元素.

此外,只要您在堆栈上创建向量(就像您所做的那样),您就不需要删除任何内容; 他们有自动存储时间.