2014-03-26 141 views
0

如何將2d數組轉換爲矢量?這是我迄今爲止所擁有的。它編譯,但它只輸出「嘿」,然後向量下標超出範圍錯誤發生。將2d數組轉換爲矢量

#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"; 
} 
+0

順便說一句,只有2行3列。第一行,你創建行..應該是我<2 – aghoribaba

回答

2

您錯誤地將行記錄在cout中的列。行:

cout << vec[n][m]; 

應該是:

cout << vec[m][n]; 

對於未來,你可以考慮使用向量的方法at。這段代碼會拋出一個更容易調試的異常。

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

好!好的通話,沒想到要切換那些 – resolv

2

其實你可以用一條線做到這一點:

// 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