C++中如何让迭代器指向vector内大于等于目标值的元素
实现方案
你已经完成了vector的升序排序,这种场景下直接使用C++ STL提供的lower_bound算法是最便捷的方案,不用手动遍历整个vector做判断。
方法说明
lower_bound定义在<algorithm>头文件中,针对有序的升序区间,会返回第一个大于等于目标值的迭代器,查找过程时间复杂度为O(log n),比全量遍历的*O(n)*效率更高。
你只需要从lower_bound返回的迭代器位置开始,遍历到vector末尾,就能得到所有符合要求的元素。
完整代码示例
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {7, 4, 5, 10, 13}; int target = 6; // 排序vector std::sort(v.begin(), v.end()); // 定位第一个大于等于target的元素位置 auto start_it = std::lower_bound(v.begin(), v.end(), target); // 输出符合要求的元素 std::cout << "["; for (auto it = start_it; it != v.end(); ++it) { if (it != start_it) { std::cout << ","; } std::cout << *it; } std::cout << "]" << std::endl; return 0; }
运行代码后输出结果为:[7,10,13],和需求完全匹配。
拓展说明
如果你后续需要筛选所有大于目标值的元素,把lower_bound替换为upper_bound即可。
内容的提问来源于stack exchange,提问作者Chandan Kumar
相关产品推荐
相关产品推荐

