std::find操作与stl中find成员函数的区别

关于C++的容器,一般可以分为序列容器(如vector, list, deque, array, forward_list, string)和关联容器(如set, multiset, map, multimap, unordered_set, unordered_multiset, unordered_map, unordered_multimap)。

一部分容器带有成员函数find,另一部分容器不具有成员函数find,但可以使用std::find进行查找

带有成员函数find的容器

使用成员函数find的容器:通常出现在关联容器无序关联容器中,这些容器是按键值进行组织的,因此它们提供了一个高效的find成员函数来快速查找特定的键值

例如:set, multiset, map, multimap, unordered_set, unordered_multiset, unordered_map, unordered_multimap,以及特殊的string。例如:

  • 关联容器
std::set<int> s = {
   1, 2, 3};
auto it = s.find(2);
  • string类
std::string str = "Hello, World!";
auto pos = str.find('W');

返回值

  • 关联容器的 find:

对于关联容器(如 std::set, std::map 等),find 成员函数会返回一个迭代器,指向找到的元素如果没有找到元素,则返回 end() 迭代器。比如在以下的例子中:

std::set<int> s = {
   1, 2, 3};
auto it = s.find(2);

s.find(2) 会返回一个迭代器,指向集合中的数字 2。可以通过 *it 来获取该元素。如果查找的元素不存在,如 s.find(4),则返回的迭代器等于 s.end()

  • string 的 find:

对于 std::string 的 find 成员函数,它会返回找到的子串(或字符)在字符串中的起始位置。如果没找到,返回 std::string::npos。比如在以下的例子中:

std::string str = "Hello, World!";
auto pos = str.find('W');

str.find('W')返回数字 6,因为 ‘W’ 是字符串 “Hello, World!” 的第 6个字符(索引从 0 开始)。如果查找的字符不存在,比如 str.find('z'),则返回的值等于 std::string::npos

不具有成员函数find但可以使用std::find的容器

这主要是序列容器,如vector, list, deque, array, forward_list。这些容器中的元素是按照它们的插入顺序进行组织的,因此没有提供一个高效的find成员函数

但是,可以使用泛型算法std::find来在这些容器中查找元素。例如:

std::vector<int> v = {
   1, 2, 3};
auto it = std::find(v.begin(), v.end(), 2);
std::list<int> l = {
   1, 2, 3};
auto it = std::find(l.begin(), l.end(), 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值