加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 取消引用向量的结束迭代器时打印的奇数值

发布时间:2020-12-16 10:35:48 所属栏目:百科 来源:网络整理
导读:我有一个存储{1,2,3,4,5}的向量.我试图打印*(vec.end())并取回结果6.我不知道如何解释这个.同样,调用vec.find(500)给出结果6.为什么我得到这个数字? #includeiostream#includeiterator#includeset#includemapint main(){ int a[] = {1,5}; std::setint set1
我有一个存储{1,2,3,4,5}的向量.我试图打印*(vec.end())并取回结果6.我不知道如何解释这个.同样,调用vec.find(500)给出结果6.为什么我得到这个数字?

#include<iostream>
#include<iterator>
#include<set>
#include<map>
int main()
{
    int a[] = {1,5};
    std::set<int> set1(a,a+sizeof(a)/sizeof(int));
    for (std::set<int>::iterator itr=set1.begin();itr!=set1.end();++itr){
        std::cout << *itr << std::endl;
    }
    //std::pair<std::set<int>::iterator,bool> ret;
    //ret = set1.insert(1);
    //std::cout << *(ret.first) << "first;second" << ret.second << std::endl;
    std::set<int>::iterator itr1 = set1.begin();
    set1.insert(itr1,100);
    std::advance(itr1,3);
    std::cout << *itr1 << std::endl;
    std::cout << *(set1.find(500)) << std::endl;
    std::cout << *(set1.end()) << std::endl;
}

解决方法

vec.end()不指向最后一个元素,但有点“落后”最后一个元素.

您没有访问向量中的最后一个元素.相反,您正在取消引用“无效”迭代器,这是未定义的行为,在这种情况下结果是向量中的无效索引.

如果找不到搜索到的元素,则vec.find返回结束迭代器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读