我可以将迭代器递增一个整数吗?
can I increment an iterator by an integer?
std::map<int, int> m;
// initialize m...
//
int n=3;
for (std::map<int, int>::iterator iter = m.begin()+n; iter != m.end(); ++iter)
// Is the above line correct?
{}
我可以按代码中所示的整数递增迭代器吗?
只有当迭代器是随机访问迭代器时,您才能对迭代器进行"指针算术"。std::set
、std::multiset
、std::map
和std::multimap
的迭代器不是随机访问迭代器。有效地支持地图迭代器的"按n
递增"操作将需要在红黑树结构中进行一些额外的簿记,这将增加所有用户的开销。这是一个很少需要的操作,因此标准库中不支持它。
你可以用std::next(m.begin(), n)
"慢"的方式做到这一点。这只会将迭代器的副本递增n
倍并返回结果。
您可以使用std::advance()
或std::next()
:
std::map<int, int> m;
...
for (auto iter = next(m.begin(), 3); iter != m.end(); ++iter)
{
}
无论迭代器类型如何,std::advance()
和std::next()
的行为都最佳。 如果将随机访问迭代器传递给它们,它们将使用operator + ()
. 否则,他们将反复使用operator ++ ()
.
相关文章:
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 当我们从/tp地址中添加/减去一个整数时会发生什么
- 如何将一个数组值合并为一个整数c++
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 我可以将迭代器递增一个整数吗?
- 有没有办法生成一个包含平方的序列,这些平方加起来就是一个整数平方?
- 为什么将两个浮点数相加会得到一个整数C++?
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 给枚举一个整数,并在 C++ 中将其相关值作为字符串获取
- 按升序输出整数时,将最后一个整数放在新行上
- 编写一个程序,提示用户输入一个整数,然后输出数字的单个数字和数字的总和
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 给定一个整数,将其表示为平方和
- c++interpret_cast是一个整数
- 以最少的步骤将给定整数转换为另一个整数
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 我需要将字符串(例如 A5)转换为一个字符串 (A) 和一个整数 (5)
- 如何交替从文件中获取一行数据和一个整数?
- 如何让这个C++代码从用户那里读取五个整数而不是一个整数?