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返回结束迭代器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |