首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么向量的std::find返回迭代器而不是整数位置

向量的std::find返回迭代器而不是整数位置的原因是为了提供更灵活的使用方式和更高的通用性。

  1. 灵活性:返回迭代器可以让我们在找到目标元素后,直接使用该迭代器进行后续操作,比如修改、删除等。如果返回整数位置,我们还需要通过下标操作来获取目标元素,增加了额外的步骤和代码复杂性。
  2. 通用性:迭代器是一种通用的抽象概念,可以适用于各种容器类型,如向量、链表、集合等。不同容器的元素存储方式和访问方式可能不同,但迭代器提供了一种统一的访问接口。因此,返回迭代器可以使std::find函数适用于不同类型的容器,而不需要为每种容器类型都设计不同的返回值类型。

此外,使用迭代器还可以方便地处理边界情况。如果目标元素不存在于向量中,std::find将返回指向容器末尾的迭代器,表示未找到目标元素。这样,我们可以通过判断返回的迭代器是否等于容器末尾来确定是否找到目标元素,而不需要额外的错误码或异常处理。

总结起来,向量的std::find返回迭代器而不是整数位置,是为了提供更灵活的使用方式、更高的通用性和更方便的边界处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ STL 概述_严丝合缝合作者

//获取到指向容器第一个数据迭代 vector::iterator begin=nums.begin(); //获取到指向结束位置迭代,注意,并不是最后一个数据,而是最后一个数据下一个存储位置...STL为 2类容器提供了insert方法,可以在指定位置为容器加入新数据。 这里需要注意:STL位置一般用迭代描述,不是索引位置。...//返回栈顶数据 x = st.top(); 关联式容器提供有专门find方法,可通过指定键值进行查找,注意,返回是用迭代所描述位置。...; //通过迭代修改 iter->second=8; //和上面的效果一样 myMap[10]=8; 2.2.6 其它方法 begin :返回容器开始位置迭代。...end:返回容器尾部数据后一个存储位置迭代。 rbegin:求指向容器反向开始元素迭代。 rend:求容器反向结尾元素后一个存储单元迭代。 swap:交换两个容器内容。

47620

【C++】STL 容器 - set 集合容器 ⑦ ( 查找元素 - set#find 函数 | 获取元素个数 - set#count 函数 )

, 该 迭代指向找到元素 ; 没有找到元素 : 如果在 std::set 集合容器中 , 没有找到指定元素 , 则返回 指向集合末尾迭代 , 即 std::set::end() 迭代 , 该迭代不指向任何元素..., 指向最后一个元素后一个位置 ; 2、代码示例 - set#find 函数 在下面的代码示例中 , 首先 , 创建了一个包含整数 1 到 5 std::set 集合容器 , // 初始化...3); 最后 , 如果找到 整数 3 , 迭代指向找到元素 , 如果没有找到元素 , 迭代指向末尾位置 ; 可以根据判断 返回 迭代是否等于 mySet.end() 值确定 , 如果等于该...末尾迭代 值 , 说明没有找到元素 ; 如果不等于该 末尾迭代 值 , 说明找到了元素 ; // 如果找到元素, 迭代指向找到元素 // 如果没有找到元素 , 迭代指向末尾位置...(3); // 如果找到元素, 迭代指向找到元素 // 如果没有找到元素 , 迭代指向末尾位置 if (it !

63810

2.1 C++ STL 数组向量容器

MyPrint(var); system("pause"); return 0;}2.2 数组向量正/反向遍历如下C++代码,展示了三种不同遍历方法,分别是使用数组下标、使用正向迭代和反向迭代遍历...在使用迭代遍历容器时,需要使用begin()和end()函数指定迭代起始位置和结束位置,反向遍历使用是rbegin()和rend()函数。...在使用迭代遍历整个vector容器时,需要使用begin()和end()函数来指定迭代起始位置和结束位置。...代码使用两种方式构造了包含整数元素向量容器v1和v2。其中,v1使用数组arry和sizeof(arry)/sizeof(int)方式进行初始化。v2则继承自v1,使用了迭代方式初始化。...使用find()函数查找元素7在vector中位置,并使用erase()函数将此位置元素从vector中删除。如果元素7不存在于vector中,则不进行任何操作。

17030

2.1 C++ STL 数组向量容器

MyPrint(var); system("pause"); return 0; } 2.2 数组向量正/反向遍历 如下C++代码,展示了三种不同遍历方法,分别是使用数组下标、使用正向迭代和反向迭代遍历...在使用迭代遍历容器时,需要使用begin()和end()函数指定迭代起始位置和结束位置,反向遍历使用是rbegin()和rend()函数。...在使用迭代遍历整个vector容器时,需要使用begin()和end()函数来指定迭代起始位置和结束位置。...代码使用两种方式构造了包含整数元素向量容器v1和v2。其中,v1使用数组arry和sizeof(arry)/sizeof(int)方式进行初始化。v2则继承自v1,使用了迭代方式初始化。...使用find()函数查找元素7在vector中位置,并使用erase()函数将此位置元素从vector中删除。如果元素7不存在于vector中,则不进行任何操作。

16520

Rust实战系列-基本语法

所以不用写 return 语句 ⚠️ 注意:如果在 add 函数 i + j 之后添加 ; 将会改变语义,使得函数返回空值()不是 i32 类型。...第六行,调用了函数,和其他语言类似。 第八行,println!() 是一个宏,有点像函数,只是返回代码(code)不是值,每种数据类型都有对应转为字符串方法,println!...(和 C 语言类似),在第一次迭代中,item 返回 1,在最后一次迭代中,它返回 4862 创建支持循环迭代 以下示例代码允许通过数组引用创建数组迭代,具体来说,&haystack 可以对 haystack...中元素进行迭代,但不是所有类型(例如:自定义类型)都支持这种用法,还可以使用 haystack.iter() 返回迭代遍历元素。...对应 Vec中 usize.saturating_sub() 是一种减法,在整数下溢出时返回 0,不是让程序崩溃 将某行内容复制到新字符串中,并存储在局部变量中 ref 通知编译借用这个值,不是移动它

2.1K10

C++初阶:初识STL、String类接口详细讲解(万字解析)

迭代为程序员提供了一种抽象方式来访问容器中元素,不用关心容器底层实现细节 迭代名称 功能说明 begin() 返回一个指向字符串中第一个字符迭代 end() 返回一个指向字符串最后一个字符下一个位置迭代...rbegin() 反向开始,返回一个指向字符串最后一个字符迭代 rend() 反向开始,返回一个指向字符串中第一个元素之前位置迭代 std::string 类提供了多种类型迭代,包括正向迭代...反向迭代允许从容器末尾向前遍历容器中元素。 rend 函数返回一个反向迭代,指向容器中第一个元素之前位置。通常用于标记反向遍历结束位置。...注意事项: capacity() 返回是字符串对象分配总空间,不是当前字符串实际长度。...npos 类型是 size_t,它是一个无符号整数类型 8.String operations函数(find,rfind,substr) 8.1find find 用于返回 一个字符或一个字符数组或一个

13510

488. 快乐数

写一个算法来判断一个数是不是"快乐数"。 一个数是不是快乐是这么定义:对于一个正整数,每一次将该数替换为他每个位置数字平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。...顺便复习一下std::find函数,在头文件algorithm里。...last, const T& val); //接受一对迭代和一个查找目标,返回一个迭代,如果没找到返回尾后。...(res.begin(),res.end(),num)==res.end()) //这是std::find接受一堆迭代和一个目标,是一个模板函数...,身边没有笔,就没算,后来一查果然无论是快乐或者不快乐,最后都会归结到1或者4,也就是说,只要是一个整数,一直循环进行这个操作,不是最后得到不是1就是4,那么这样就简单多了,直接循环,得到1或者4跳出

43430

【C++】红黑树封装实现 map 和 set

set 中用于接受返回 iterator 其本质封装是红黑树 const 迭代,所以这里报错原因是 将红黑树普通迭代赋值给红黑树 const 迭代; 这个问题解决办法有很多,...//typename作用是告诉编译这是一个类型,不是静态变量 //使用红黑树const迭代来封装set普通迭代,从而保证K不能被修改 typedef typename RBTree...和布尔值组成键值对进行返回,这样就不会发生类型冲突了; 那么为什么红黑树普通迭代能够构造出 const 迭代呢?...答案在红黑树迭代中 – 可以看到红黑树迭代中貌似实现了一个拷贝构造函数,但奇怪地方在于该函数参数是一个普通迭代不是 Self,而这就是关键所在: 当模板实例化为 ...//typename作用是告诉编译这是一个类型,不是静态变量 //使用红黑树const迭代来封装set普通迭代,从而保证K不能被修改 typedef typename RBTree

82330

【c++】标准模板库STL入门简介与常见用法

注意:算法都是全局函数模板,如:for_each( )、find()、count()和sort()等 4、迭代(Iterator) 迭代类似于C++指针,是一个指示,用来指示容器中某个元素,迭代出现使得容器与算法分离成为可能...d.sort();           //list类排序使用成员函数完成。不是用通用算法函数。...迭代 begin()和end()返回头尾迭代; rbegin()和rend()返回尾头反向迭代:rbegin()返回最后一个元素迭代,rbegin++返回倒数第二个元素。...s.lower_bound(key);//返回key前面的元素迭代 s.upper_bound(key);//返回key后面的元素迭代 s.find(key);      //在s中查找键值key...<< c1.size() << std::endl ;        //使用upper_bound返回c2当前值最近增值迭代        std::cout << "* (c2.upper_bound

69310

万字长文【C++】函数式编程【上】

这种类型for循环结构简化了对可迭代数据集遍历。它通过消除初始化过程并遍历每个元素不是遍历迭代来做到这一点。...std::find_if http://www.cplusplus.com/reference/algorithm/find_if/ 查找集合中第一个满足指定胃词元素,返回一个迭代,指向字符串中满足胃词函数第一个字符...谓词不能修改传给它对象。find_if() 会返回一个指向被找到对象迭代,如果没有找到对象,会返回这个 序列结束迭代。...,前两个是输入元素迭代,拷贝两个迭代之间元素,第三个将元素拷贝到位置,第四个是选择条件,即只拷贝使条件返回true元素。...,基本上每个元素都是通过用他后面的元素覆盖它来实现移除 返回值:返回一个指向鑫最后一个元素之后位置迭代

2.2K20

【小码匠自习室】CSP-JS复赛准备:STL复习(三)

数组或者vector某个区间元素中,是否含有x,含有的时候返回索引函数 数组:find(a + l, a + r, x) 不包含x时候,a + r迭代 包含x时候,返回a[i] = x迭代...vector:find(a.begin(), a.end(), x),函数返回迭代 函数:find返回迭代,想知道最初出现位置find(a + l, a + r, x) - a 时间复杂度..., a[2], ..., a[N] 之后输入:Q个 // 对于输入(l, r, x) 、在a[l], a[l+1], ..., a[r]中,x不存在时候,返回:-1 // 不是的时候,...返回位置 int N, Q, a[1009]; cin >> N; for (int i = 1; i > a[i]; cin >> Q;...:250000位集合(250000位二进制数) bitset bs1; // 例2: 长度为8二进制数位集合,用整数初始化 bitset bs2(131); // 10000011

25410

【C++】STL基本用法

这些算法是高度优化,可适用于不同类型容器,使开发人员能够更轻松地进行常见操作。 迭代(Iterators):迭代是用于访问容器中元素通用接口。...因为 set 是一个关联容器,它元素是按照某种比较准则有序排列不是按照它们在容器中物理位置排列。...⭐2.7 查找find() 返回值: 如果找到元素,返回指向该元素迭代。 如果未找到元素,返回容器 end 迭代。 注意:如果找到元素在最后一个,返回不是end迭代!...}; // 使用 find 查找元素 set::iterator it = mySet.find(30);//返回迭代对象,未找到则返回mySet.end()...(30);//返回迭代对象,未找到则返回mySet.end() if (it !

12510

【C++修行之道】STL(初识pair、vector)

迭代: vector提供了迭代,可以用于遍历容器中元素。可以使用begin()函数获取指向第一个元素迭代,使用end()函数获取指向最后一个元素之后位置迭代。...(); begin()和 end(): 返回指向vector第一个元素和最后一个元素之后位置迭代 iterator begin(); const_iterator begin() const;...std::sort函数接受两个迭代参数,表示要排序范围。 vec.begin()返回指向vector第一个元素迭代。...vec.end()返回指向最后一个元素之后位置迭代 去重: 要去除vector中重复元素,可以使用std:unique函数。...然后,std:unique函数将重复元素移动到vector末尾,并返回一个指向重复元素迭代。最后,可以使用vec.erase函数将重复元素从vector中删除。

37010

4.1 C++ Boost 字符串处理库

细心读者应该还可以观察到to_upper_copy在其后方存在一个COPY字符,当出现拷贝字符时则预示着需要对原始字符串进行拷贝不是直接更改原始字符串意思。...find_first函数接收两个参数,第一个参数是待查找字符串,第二个参数是要查找目标子字符串,返回指向第一个匹配子字符串迭代,如果没有找到,返回末尾迭代。...find_last函数则是在待查找字符串中从后向前查找指定子字符串第一次出现,同样返回指向子字符串迭代或末尾迭代。...如果找到了目标子字符串,返回一个指向它迭代,否则返回一个指向结束迭代(end)迭代。...如果没有匹配到子字符串,返回迭代将指向容器或字符串序列末尾。

37030

C++13-STL模板

一个保存intvector迭代声明方法为: vector::iterator it; vector迭代是“随机访问迭代”,可以把vector迭代与一个整数相加减,其行为和指针移动类似...可以把vector两个迭代相减,其结果也和指针相减类似,得到两个迭代对应下标之间距离。 8. begin/end begin函数返回指向vector中第一个元素迭代。...s.end() 是指向集合中最大元素下一个位置迭代。换言之,就像vector一样,是一个“前闭后开”形式。因此–s.end()是指向集合中最大元素迭代。...在set中,若元素已存在,则不会重复插入该元素,对集合状态无影响。 find s.find(x) 在集合s中查找等于x元素,并返回指向该元素迭代。若不存在,则返回s.end()。...返回指定元素出现次数 empty() 如果map为空则返回true end() 返回指向map末尾迭代 equal_range() 返回特殊条目的迭代

23120

4.1 C++ Boost 字符串处理库

细心读者应该还可以观察到to_upper_copy在其后方存在一个COPY字符,当出现拷贝字符时则预示着需要对原始字符串进行拷贝不是直接更改原始字符串意思。...find_first函数接收两个参数,第一个参数是待查找字符串,第二个参数是要查找目标子字符串,返回指向第一个匹配子字符串迭代,如果没有找到,返回末尾迭代。...find_last函数则是在待查找字符串中从后向前查找指定子字符串第一次出现,同样返回指向子字符串迭代或末尾迭代。...如果找到了目标子字符串,返回一个指向它迭代,否则返回一个指向结束迭代(end)迭代。...如果没有匹配到子字符串,返回迭代将指向容器或字符串序列末尾。

25730
领券