【问题标题】:On iterator and I value in C++关于迭代器和我在 C++ 中的值
【发布时间】:2016-10-28 21:08:34
【问题描述】:

我的问题是 sn-p A 运行良好但 sn-p B 失败的原因是什么?


片段A

std::vector<double> a;
std::vector<double>::const_iterator i;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
for(i=a.begin(); i!=a.end(); ++i){
    std::cout<<(*i)<<std::endl;}

片段 B

std::vector<int> v;
v.push_back(999);
int j = *(--v.end()); //What's wrong here?

【问题讨论】:

  • Snippet B 在什么方面让你失望了?
  • 你不能对右值这样做。减少右值迭代器和减少右值迭代器一样荒谬--2
  • ideone.com/dSjhtJ 我没有看到任何“不工作”
  • 可以使用*(v.end()-1),但不能修改end()迭代器。这就像尝试做--sizeof(array)
  • @Barmar,请将您的答案作为解决方案发布,以便尼古拉斯接受

标签: c++ vector iterator


【解决方案1】:

迭代器不需要支持右值的递增和递减。尤其是指针,不要。 vector 的迭代器可能——但不一定是——指针。

因此,*--v.end() 不需要工作。请改用a.back()(或std::prev(v.end()) 作为迭代器)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2011-09-05
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多