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

Posted

技术标签:

【中文标题】奇怪的 std::vector::reverse_iterator 和字符串行为【英文标题】:Weird std::vector::reverse_iterator and string behavior 【发布时间】:2014-11-12 22:55:09 【问题描述】:

所以我有一个线性向量,用于通过一个类存储 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) 手动。 (成员函数) 所以说我为一个 6x6 =36 大小的向量填充了 2.38 然后改变了。现在我将要访问的第一个值(向量中的最后一个,反向迭代器中的第一个)更改为 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 值...怎么了? 我想避免[]operator。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于奇怪的 std::vector::reverse_iterator 和字符串行为的主要内容,如果未能解决你的问题,请参考以下文章

Python元类的__new__方法中的奇怪行为[重复]

iOS 上 NEON 代码的奇怪结果,跳转到 __ARCLite__load?

multiprocessing.Queue 奇怪的 python 行为

指针类型不兼容??奇怪的

使用 override func draw(_ rect: CGRect) 时显示奇怪的边框

QProgressBar 与 PyQt4 的奇怪行为