奇怪的 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 和字符串行为的主要内容,如果未能解决你的问题,请参考以下文章
iOS 上 NEON 代码的奇怪结果,跳转到 __ARCLite__load?
multiprocessing.Queue 奇怪的 python 行为