2017-03-18 73 views
0

我一直在努力以創建和打印出使用矢量在C++如何使用矢量創建一個不齊的數組?

#include <iostream> 
#include <vector> 

typedef std::vector<std::vector<int>> Matrix; 

int main() 
{ 
    Matrix a(10); 

    for(int i = 0; i < 10; i++) a[i].resize(i + 1); 

    for (int i = 0; i < a.size(); i++) 
    { 
     for (int j = 0; j < a.size(); j++) 
     { 
      std::cout << a[i][j]; 
     } 
     std::cout << std::endl; 
    } 
    return 0; 
} 

我有一個粗糙的陣列基質「有點」成功...上面的代碼的

輸出是:

07143616-12660115513423912300-10982394020134798700 
00-1098239402013479870001-109823940134239122 
0001-1098239401342391220000 
0000-1097584032139471475527143616-428591069134239123 
000001917869114-2593786113423912500 
000000-916064620134798900 
0000000691419256-9160646134239124 
00000000-59492295201347988 
0000000001684957527 
0000000000 

而且我在尋找這樣一個三角形輸出:

0 
00 
000 
0000 
00000 
000000 
0000000 
00000000 
000000000 
0000000000 

任何人都可以指出這個代碼中的問題,爲什麼我不能得到一個很好的印刷三角?

感謝

回答

0

你的循環有一個簡單的邏輯錯誤:

for (int i = 0; i < a.size(); i++) 
{ 
    // wrong: 
    // for (int j = 0; j < a.size(); j++) 

    // should be a[i].size() 
    for (int j = 0; j < a[i].size(); j++) 
    { 
     std::cout << a[i][j]; 
    } 
    std::cout << std::endl; 
} 
+0

非常感謝你:) – noobcoder

0

你是八九不離十。問題在於你的內循環的極限是錯誤的,應該是a[i].size(),而不是a.size()。所以你正在訪問較短向量中不存在的元素。

for (int i = 0; i < a.size(); i++) 
{ 
    for (int j = 0; j < a[i].size(); j++) 
    { 
     std::cout << a[i][j]; 
    } 
    std::cout << std::endl; 
} 
+0

謝謝,我明白了:) – noobcoder

相關問題