std::distance 计算两迭代器间元素个数,随机访问迭代器下为 O(1),否则 O(n);std::advance 将迭代器移动指定距离,同样依迭代器类型决定效率,二者均需确保操作合法以避免未定义行为。

在C++ STL中,distance 和 advance 是两个用于操作迭代器的实用函数,常用于计算或调整容器中元素的位置。它们定义在 iterator 头文件中(#include <iterator>),适用于不同类型的迭代器,但行为受迭代器类别的影响。
std::distance(first, last) 返回从迭代器 first 到 last 之间的元素个数,即位置差。
返回类型是 std::iterator_traits<Iterator>::difference_type,通常是 ptrdiff_t。
注意:
立即学习“C++免费学习笔记(深入)”;
last - first
示例:
#include <vector>
#include <iterator>
#include <iostream>
<p>std::vector<int> vec = {10, 20, 30, 40, 50};
auto it1 = vec.begin();
auto it2 = vec.begin() + 3;</p><p>std::cout << std::distance(it1, it2) << std::endl; // 输出 3
std::advance(it, n) 将迭代器 it 原地移动 n 个位置。
注意:
立即学习“C++免费学习笔记(深入)”;
示例:
#include <list>
#include <iterator>
<p>std::list<int> lst = {1, 2, 3, 4, 5};
auto it = lst.begin();
std::advance(it, 2); // it 指向第3个元素(值为3)</p><p>std::advance(it, -1); // 支持双向迭代器,向前移动1位
在编写泛型代码时,合理使用 distance 和 advance 可以让算法兼容多种容器。
基本上就这些。理解这两个函数的行为差异,有助于写出高效且可移植的 STL 代码。
以上就是C++STL中distance和advance计算容器位置的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号