分配&amp; vector <int> </int>的输出向量

时间:2015-02-12 06:38:01

标签: c++ vector

下面的代码生成结果输出,这是我需要的完全正常。但是我希望将每个修改后的vector<int>保存在另一个向量中,然后通过打印vector<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;
}

1 个答案:

答案 0 :(得分:0)

您已评论// rlist[count++] = list;

那可能是因为它失败了。 rlist为空,它没有元素[0],因此您无法分配它。但是,您不想分配给[0],您想要创建它。最简单的方法是rlist.push_back(list);