2015-02-12 32 views
0

下面的代碼生成結果輸出,這是我所需要的非常好。但是我想將其中每個修改後的vector<int>保存在另一個向量中,然後通過打印vector<vector<int>>元素來獲取輸出。分配和輸出向量的矢量<int>

我得到了一個模板,它提供了一個向量的格式化輸出,但它無法打印vector<vector<int>>的元素,通過取消註釋代碼片段來檢查。

這是爲什麼?

如何先分配然後打印vector<vector<int>>元素,使輸出保持與現在相同?

使用C++ 14(4.9.2)

#include <iostream> 
#include <vector> 

using namespace std; 

#define s(n)      scanf("%d",&n) 

template<typename T> 
inline std::ostream &operator << (std::ostream & os,const std::vector<T>& v) 
{ 
    bool first = true; 
    os << "["; 
    for(unsigned int i = 0; i < v.size(); i++) 
    { 
     if(!first) 
      os << ", "; 
     os << v[i]; 
     first = false; 
    } 
    return os << "]"; 
} 

typedef vector<int> vi; 
typedef vector<vi> vvi; 

int main() 
{ 
    int n = 4; 
    // s(n); 

    vi list(n, 1); 

    // vvi rlist; 
    // int count = 0; 
    // rlist[count++] = list; 
    cout << list << "\n"; 

    for (int i = 1; i <= n; ++i) 
    { 
     for (int j = n; j >= i; --j) 
     { 
      while(list[j] == list[j-1]) 
      { 
       ++list[j]; 
       cout << list << "\n"; 
       // rlist[count++] = list; 
      } 
     } 
    } 
    return 0; 
} 
+0

您可能會對KerrekSB的[Pretty-print C++ STL容器](https://stackoverflow.com/questions/4850473/pretty-print-c-stl-containers)感興趣。 – 2015-02-12 06:41:33

+0

你需要用count來初始化'rlist'以便使用方括號。 http://ideone.com/XY7pdJ – zahir 2015-02-12 06:47:06

+0

謝謝你們兩位, – amarvashishth 2015-02-12 07:20:17

回答

0

你註釋掉// rlist[count++] = list;

這大概是因爲它失敗。 rlist是空的,它沒有元素[0],所以你不能分配給它。但你不想分配到[0],你想創建它。最簡單的方法是rlist.push_back(list);