C++复制多维向量
C++ copying multidimensional vector
我在复制多维向量时遇到问题,我已经尝试了很多方法,但这是最后一个:
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
和适当时遇到问题,当我处于 10 个步骤时,如何将current_path
添加到all_paths
?
你的代码有几个问题。在第 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
s。
而不是
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];
- 将指向给定子类的指针从一个向量复制到另一个向量
- 将字符向量复制到另一个向量
- 将shared_ptr的向量复制到抽象基的派生类
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 自定义类对象的C++向量 - 复制构造函数已删除 - std::ifstream
- 如何在C++中将一个对象从一个向量复制到另一个向量?
- 将特征向量复制到 C 数组
- 将std ::向量复制到CV :: Mat_的行操作相同
- 将向量复制到 std::string
- 如何以相反的顺序将整个向量复制到队列中
- 按索引将类类型元素从一个向量复制到另一个 c++
- 使用迭代器将向量复制到数组中
- 为什么是非法的:将指针向量复制到指向常量的指针向量中
- 将元素从一个向量复制到另一个向量的最有效方法,给定一个不被复制的索引列表
- C++-将数据从浮点向量复制到uint8向量
- 将字符串从向量复制到字符串
- 我可以使用STD ::复制将数据的位模式从整数向量复制到一系列未签名的字符
- 将指针从一个向量复制到另一个向量;地址指出了变化
- 如何将内容从一个字符串向量复制到另一个字符串向量
- 以相反的顺序将一个向量复制到另一个向量