wkl*_*wkl 90
你使用std::find
from <algorithm>
,它同样适用于std::list
和std::vector
.std::vector
没有自己的搜索/查找功能.
#include <list>
#include <algorithm>
int main()
{
std::list<int> ilist;
ilist.push_back(1);
ilist.push_back(2);
ilist.push_back(3);
std::list<int>::iterator findIter = std::find(ilist.begin(), ilist.end(), 1);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这适用于内置类型int
以及std::string
默认情况下的标准库类型,因为它们已operator==
为它们提供了这些类型.如果您std::find
在用户定义类型的容器上使用,则应该重载operator==
以允许std::find
正常工作:EqualityComparable
概念
Jan*_*cek 18
不,不是直接在std :: list模板本身.但是你可以使用std :: find算法:
std::list<int> my_list;
//...
int some_value = 12;
std::list<int>::iterator iter = std::find (my_list.begin(), my_list.end(), some_value);
// now variable iter either represents valid iterator pointing to the found element,
// or it will be equal to my_list.end()
Run Code Online (Sandbox Code Playgroud)
除了使用std :: find(来自算法)之外,您还可以使用std :: find_if(这比IMO更好,然后是std :: find),或者使用此列表中的其他查找算法
#include <list>
#include <algorithm>
#include <iostream>
int main()
{
std::list<int> myList{ 5, 19, 34, 3, 33 };
auto it = std::find_if( std::begin( myList ),
std::end( myList ),
[&]( const int v ){ return 0 == ( v % 17 ); } );
if ( myList.end() == it )
{
std::cout << "item not found" << std::endl;
}
else
{
const int pos = std::distance( myList.begin(), it ) + 1;
std::cout << "item divisible by 17 found at position " << pos << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)