奇怪的std :: vector :: reverse_iterator和字符串行为

时间:2014-11-12 22:55:10

标签: c++11 vector reverse-iterator

所以我有一个线性向量,用于通过类存储2D值:现在我想反向打印值...值(0,0)占据左下角(max_x,max_y)占据右上角...就像一个典型的笛卡尔网格。这是我的代码:

 std::string ss="";
 int i=0;
    for (std::vector<real>::reverse_iterator it= vector.rbegin(); it!=vector.rend();++it)
    {
        if (lineChanger==max_x)
        {
            std::cout<<ss<<std::endl;
            ss=""; lineChanger=0;
        }
        ss=std::to_string(*it) +"|"+ ss;
        lineChanger++;
    }

注意:如果我不直接使用字符串和打印,一切都很好,只是顺序颠倒了。我所有的会员职能都有效 现在在我的主代码中,我使用std::fill用我需要的值(类函数调用)填充向量。然后更改一些值,例如手动在(0,0)(max_x,max_y)。 (会员功能) 所以说我填充2.38为6x6 = 36大小的矢量然后改变。现在我将要访问的第一个值(向量中的最后一个,反向迭代器中的第一个)更改为3并运行程序。 输出:

 2.380000|2.380000|2.380000|2.380000|2.380000|2.380000|
 2.380000|2.380000|2.380000|2.380000|2.380000|2.380000|
 2.380000|2.380000|2.380000|2.380000|2.380000|2.380000|
 2.380000|2.380000|2.380000|2.380000|2.380000|2.380000|
 2.380000|2.380000|2.380000|2.380000|2.380000|2.380000|

那是对于矢量的整个大小,我只得到初始的std :: fill值 ...有什么问题? 我想避免[]运营商。

1 个答案:

答案 0 :(得分:0)

请注意,您的示例输出包含30个值,而不是36个值。您的循环仅在包含max_x值后的迭代上打印字符串。所以在循环结束时,最后一行值在字符串变量中但从未打印过。