文章目录
关于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(),