代码之家  ›  专栏  ›  技术社区  ›  bobobobo

“指向最后一个元素的指针”的prettier语法,std::vector?

  •  11
  • bobobobo  · 技术社区  · 14 年前

    我想知道是否有更漂亮的语法来获得一个普通指针(而不是迭代器)到C++向量中的最后一个元素。

    std::vector<int> vec;
    
    int* ptrToLastOne = &(*(vec.end() - 1)) ;
    
    // the other way I could see was
    int* ptrToLastOne2 = &vec[ vec.size()-1 ] ;
    

    但这两个都不好看!

    4 回复  |  直到 14 年前
        1
  •  33
  •   Mike Seymour    14 年前
    int* ptrToLastOne = &vec.back(); // precondition: !vec.empty()
    
        2
  •  6
  •   Cătălin Pitiș    14 年前
    int* ptrToLast = &(vec.back()); // Assuming the vector is not empty.
    
        3
  •  4
  •   Viktor Sehr    14 年前

    更多选项:

    int* ptrToLast = &*vec.rbegin();
    

    int* ptrToLast = &*boost::prev(vec.end());
    
        4
  •  3
  •   Community skywinder    7 年前

    没有什么比这更漂亮的了,但是你可以编写一个模板化的助手函数,它在内部也会为你做同样的事情,这样至少调用站点看起来会更干净,而且你会因为输入错误而出错的概率更低。

    accepted answer 对于一个非常相似的问题,以及解决方案可能是什么样子。