【问题标题】:Iterator and 2d vector迭代器和二维向量
【发布时间】:2009-11-17 04:03:16
【问题描述】:
vector< vector<int> >::iterator temp = mincost.end();
vector<int> a = *temp;
if ( *temp != *(temp--) ) 
    return 0;

mincost 是一个二维向量,我想得到这个向量的最后一个vector&lt;int&gt;last--。 我不太了解迭代器:)。帮我 !! :D 谢谢^^

【问题讨论】:

  • 使用 reverse_iterator 获取最后一个单元格(如果存在);和 ++ 获得倒数第二个。

标签: c++ stl vector iterator


【解决方案1】:

minconst.end()指向向量minconst的元素one-past-the-end;它不指向向量中的最后一个元素。

既然你想要最后两个元素,你应该首先测试以确保向量中实际上两个元素,否则你不可避免地会遇到问题。然后,访问向量中的最后一个元素只需*(minconst.end() - 1) 等等。

C++ 参考也有a description of iterators

【讨论】:

  • 你的一次性链接真的很有用:)
【解决方案2】:

了解一般的迭代器可能会有所帮助。

快速的 google 搜索可以找到许多很好的参考资料,其中最重要的是 http://www.cppreference.com/wiki/stl/iterators

祝你好运!

【讨论】:

  • 我已经搜索过,但我不太明白:D。
【解决方案3】:

如果您是 STL 容器的新手,请将 end() 迭代器视为 C 字符串中的 '\0' 字符之类的东西——它们定义了结束的位置,但它们携带的实际值没有用.如果你取消引用结束迭代器,你会得到垃圾,或者很可能是一个异常。

试试这个:

       if (!mincost.empty())
       {
             //it contains atleast one 1-d vector and the 'end' iterator.
             iter = mincost.end();
             --iter;
             //dereference iter here.
       }

一旦您对迭代器的思考感到满意,请查看 reverse_iterator。正如 Effo 所说,它们是这里的最佳解决方案。

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多