首页
学习
活动
专区
工具
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:交换两个容器的内容。

51120
  • 【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 !

    97910

    vector类介绍

    ,这里展示了如何使用数组初始化vector // 注意:这里直接使用数组名和数组大小作为参数,而不是数组的首尾迭代器 int myints[] = { 16,2,77,29 };...,在对it迭代器操作时,实际操作的是一块已经被释放的 空间,而引起代码运行时崩溃。...,理论上讲迭代 器不应该会失效, 但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。...因此删除vector中任意位置上元素时,vs就认为该位置迭代器失效 了。 以下代码的功能是删除vector中所有的偶数,请问那个代码是正确的,为什么?...注意:Linux下,g++编译器对迭代器失效的检测并不是非常严格,处理也没有vs下极端。 // 1.

    7910

    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中,则不进行任何操作。

    20230

    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中,则不进行任何操作。

    19920

    Rust实战系列-基本语法

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

    2.2K10

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

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

    21110

    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跳出

    44830

    C++效率掌握之STL库:string函数全解

    :如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作 2.string类对象的常见构造 string作为一个类也有构造函数...+ end 迭代器:begin 获取开头一个字符 + end 获取最后一个字符下一个位置 rbegin + rend 反向迭代器:rbegin 获取最后一个字符 + end 获取开头一个字符上一个位置...cbegin + cend 和 begin + end 一样,但是常量迭代器只读 crbegin + crend 和 rbegin + rend 一样,但是反向常量迭代器只读 值得注意的是: 定义开头变量前的类型...,可以用 auto 代替自动推导,避免了很长的类型,比如后续学习 map 的迭代器类型是这样的 std::mapstd::string,std::string >::iterator ,就很有必要用...C 风格字符串 find系列没找到就返回npos 对于 compare,逐个比较,如果当前字符串小于比较对象,返回一个负整数;如果当前字符串等于比较对象,返回 0 ;如果当前字符串大于比较对象,返回一个正整数

    19410

    【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...std::endl ;        //使用upper_bound返回c2当前值的最近增值迭代器        std::cout << "* (c2.upper_bound

    73010

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

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

    2.6K20

    【小码匠自习室】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

    31310

    【C++】STL的基本用法

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

    16310

    【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中删除。

    74010

    4.1 C++ Boost 字符串处理库

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

    45930

    C++13-STL模板

    一个保存int的vector的迭代器声明方法为: 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() 返回特殊条目的迭代器对

    30020
    领券