2014-04-04 55 views
0

我想確保將2D數組正確地複製到2D向量中?但我不知道我該怎麼打印?打印多維向量

預先感謝您:

int path1[2][6] = {{6, 0, 1, 5, 6}, {6, 2, 4, 3, 6}}; 

vector<vector<int>> path2; 
vector<int> temp; // For simplicity 
for (int x = 0; x <= k; x++) 
{ 
    for (int y = 0; y < customer_inroute[x]; y++) 
    { 
     temp.push_back(path1[x][y]); 
    } 
    path2.push_back(temp); 
} 


vector<vector<int>>::iterator it; 

it = path2.begin(); 
for (it = path2.begin(); it < path2.end(); it++) 
    std::cout << ' ' << * it; 
cout << '\n'; 
+1

*將它給你內部向量。現在循環通過該內部向量。另外,k是在什麼地方定義的(你的第一個for循環)? –

+2

你應該在'path2.push_back(temp);'之後清除'temp',否則當你添加新元素時,它仍然會包含前面迭代的元素。 – maddin45

+0

@ maddin45我該怎麼辦? – IMI

回答

1

,如果你想使用迭代器這應該做的伎倆:

vector<vector<int>::iterator it; 
vector<int>::iterator  it_inner; 

for (it = path2.begin(); it != path2.end; it++) 
{ 
    for (it_inner = (*it).begin(); it_inner != (*it).end(); it_inner++) 
    { 
     cout << ' ' << *it_inner; 
    } 
    cout << endl; 
} 
2

有幾種方法。這是一個:

for (int i=0; i<path2.size(); ++i) { 
    for (int j=0; j<path2[i].size(); ++j) { 
     cout << path2[i][j] << " "; 
    } 
    cout << endl; 
} 

另外,具有範圍爲基礎的(C++ 11):

for (const auto& inner : path2) { 
    for (auto value : inner) { 
     cout << value << " "; 
    } 
    cout << endl; 
} 
3

首先,我不知道什麼customer_inroute[x]是,但下次有更多真正代碼你的問題。這就是說,可以救自己一些打字,做這樣的:

#include <iostream> 
#include <vector> 

int main() 
{ 
    int path1[2][6]={{6,0,1,5,6},{6,2,4,3,6}}; 
    std::vector< std::vector<int> > path2; 

    for (auto& row : path1) 
     path2.emplace_back(std::begin(row), std::end(row)); 

    // send copy to stdout 
    for (auto& row : path2) 
    { 
     for (auto val : row) 
      std::cout << val << ' '; 
     std::cout << '\n'; 
    } 

    return 0; 
} 

而且我要指出你的原始path1行被宣佈爲6元寬,但你只能在每個初始化列表中提供5。結果,最後一個元素被填充爲零。得到的上述看起來像這樣的輸出,順便說一句:

輸出

6 0 1 5 6 0 
6 2 4 3 6 0