将2d数组转换为矢量

Convert 2d array to vector

本文关键字:转换 2d 数组      更新时间:2023-10-16

如何将2d数组转换为矢量?这是我目前得到的。它可以编译,但它只输出"hey",然后出现vector下标超出范围错误。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    string arr[2][3] = { { "hey", "what", "up" }, { "how", "you", "doin" } };
    vector<vector<string>> vec;
    for (int i = 0; i < 3; i++){        //creating row
        vec.push_back(vector<string>());
    }
    for (int n = 0; n < 3; n++){        //creating columns for the rows
        for (int m = 0; m < 2; m++){    
            vec[m].push_back("");
        }
    }
    for (int m = 0; m < 2; m++){        //storing and printing data
        for (int n = 0; n < 3; n++){
        //  vec[n].push_back(arr[m][n]);
            vec[m][n] = arr[m][n];
            cout << vec[n][m];
        }
    }
    cout << "n";
}

实际上你可以用一行来完成:

// Define and initialize a vector with 2D array
vector<vector<string>> vec = {vector<string>(begin(arr[0]), end(arr[0])),
                              vector<string>(begin(arr[1]), end(arr[1]))};
cout << arr[1][2] << endl;  // cout: "doin"
cout << vec[1][2] << endl;  // cout: "doin"
// print all elements
for (auto row : vec)
    for (auto elem : row)
        cout << elem << " "; // cout: hey what up how you doin

您把cout中的行和列搞错了。线:

cout << vec[n][m];
应:

cout << vec[m][n];

以后,可以考虑使用vector的方法at。这段代码会抛出一个异常,这样更容易调试。

cout << vec.at(n).at(m);