我有以下矩阵:
unsigned wins[8][3] = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 0, 3, 6 }, { 1, 4, 7 }, { 2, 5, 8 }, { 0, 4, 8 }, { 2, 4, 6 } };
如何将其转换为std :: vector?
答案 0 :(得分:2)
您可以使用两个迭代器构造函数来实例化一个带有wins
中数据副本的向量:
unsigned* start = &wins[0][0];
std::vector<unsigned> vwins(start, start + (8 * 3));
这取决于指针算法,指针是迭代器的事实,以及2D数组是连续块的事实,本质上是具有巧妙索引的1D数组。
答案 1 :(得分:0)
由于我不知道你是否想要2D矢量,我将处理2D情况,因为juanchopanza处理了1D案例。 :)如果您正在使用C ++ 11,那么您可以这样做:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector<int>> wins = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 0, 3, 6 }, { 1, 4, 7 }, { 2, 5, 8 }, { 0, 4, 8 }, { 2, 4, 6 } };
for(vector<int> & row : wins) {
for(int &col : row) {
cout << col << " ";
}
cout << endl;
}
return 0;
}
此示例使用C ++ 11初始化列表创建一个类似的结构,也称为wins。我还写了一些代码来展示如何循环使用它以一种合理的顺序打印出来。
希望这有帮助! :)