2015-02-12 2 views
0

Приведенный ниже код генерирует результат, который отлично подходит для меня. Но я хочу сохранить каждый из измененных vector<int> в другом векторе, а затем получить вывод, напечатав vector<vector<int>> элементов.Assign & Output vector of vector <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

Возможно, вас заинтересовал [Pretty-print C++ STL контейнеры] (https://stackoverflow.com/questions/4850473/pretty-print-c-stl-containers) от KerrekSB. –

+0

вам нужно инициализировать 'rlist' с помощью count, чтобы использовать квадратные скобки. http://ideone.com/XY7pdJ – zahir

+0

Спасибо вам, – amarvashishth

ответ

0

Вы закомментирована // rlist[count++] = list;

Это, вероятно, потому что он терпит неудачу. rlist пуст, он не имеет элемента [0], но вы не можете его назначить. Но вы не хотите назначать [0], вы хотите его создать. Самый простой способ сделать это - rlist.push_back(list);.