C++如何检查list指定索引特定值及获取匹配元素索引
解答
首先你当前的代码存在基础类型错误:
- 你定义的是存储
int类型的list<int>容器,但是调用find查找时传入的目标值是字符串字面量"generic string",二者类型完全不匹配,这段代码无法通过编译,不可能正常完成查找。你需要先把查找目标换成和容器存储类型一致的int类型值,才能执行后续的索引获取逻辑。
std::list是双向链表实现的容器,不支持随机访问,没有提供直接获取元素索引的内置方法,拿到合法的目标元素迭代器后,可以通过以下方式获取索引:
- 用标准库的
std::distance函数计算从容器起始位置到目标迭代器的偏移量,这个从0开始计数的偏移量就是对应元素的索引。
示例代码:#include <list> #include <algorithm> #include <iterator> // 先修正查找逻辑,target_num是你要找的int类型目标值 auto find_res = find(generic_list.begin(), generic_list.end(), target_num); if (find_res != generic_list.end()) { // 计算得到0起始的索引值 size_t target_index = distance(generic_list.begin(), find_res); } - 相关注意事项:
- 因为
list的迭代器是双向迭代器,不支持随机跳转,distance执行时会从链表头开始逐个遍历计数直到目标位置,时间复杂度为O(n),如果你的场景需要频繁查询元素索引、按索引访问元素,不建议使用list,换成std::vector这类支持随机访问的顺序容器性能会好很多,这类容器获取索引的时间复杂度为O(1)。 - 一定要先判断
find返回的迭代器是否等于end(),确认元素存在之后再计算索引,否则会触发未定义行为。
- 因为
内容的提问来源于stack exchange,提问作者Funny Programmer
相关产品推荐
相关产品推荐

