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