我有以下矩阵:
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?
您可以使用两个迭代器构造函数来实例化具有以下数据副本的向量wins
:
unsigned* start = &wins[0][0];
std::vector<unsigned> vwins(start, start + (8 * 3));
这依赖于指针算法,指针是迭代器的事实,以及二维数组是连续块的事实,本质上是具有智能索引的一维数组。
由于我不知道您是否需要 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。我还写了一个小代码来展示如何循环遍历它并以合理的顺序打印出来。
希望这可以帮助!:)