这是一个奇异迭代器吗?如果是,我能否将它与另一个进行比较?
Is this a singular iterator and, if so, can I compare it to another one?
我一直认为"单数"迭代器是默认初始化的迭代器,它们可以作为可比较的哨兵值,排序为:
typedef std::vector<Elem>::iterator I;
I start = I();
std::vector<Elem> container = foo();
for (I it = container.begin(), end = container.end(); it != end; ++it) {
if ((start == I()) && bar(it)) {
// Does something only the first time bar(it) is satisfied
// ...
start = it;
}
}
但是这个答案不仅表明我对"单数"的定义是错误的,而且表明我上面的比较是完全不合法的。
?
显然这对一些迭代器有效——T*
就是一个明显的例子——但这绝对不能保证对所有迭代器都有正确的行为。c++ 11 24.2.1 [iterator.requirements.]一般]p5:
奇异值不与任何序列相关联…对于奇异值,大多数表达式的结果是未定义的;唯一的异常会破坏保存奇异值的迭代器将非奇异值赋值给保存的迭代器的奇异值和DefaultConstructible需求,使用值初始化的迭代器作为复制或移动操作的源。
您可以使用一个简单的bool
标志来复制您想要的行为:
std::vector<Elem> container = foo();
bool did_it_already = false;
for (I it = container.begin(), end = container.end(); it != end; ++it) {
if (!did_it_already && bar(it)) {
// Does something only the first time bar(it) is satisfied
// ...
did_it_already = true;
}
}
相关文章:
- 如何在 c++ 中比较 2 个链表并将匹配的数据放入另一个链表中
- C++设置了一个用于排序的比较器和另一个用于唯一性的比较器
- 我如何将一个变量与另一个变量进行比较,例如我想如果(var1 > var2 x 1),然后执行此 c++
- 我怎样才能洗牌给定大小的数组并将其与C++中另一个相同大小的数组进行比较
- 如何将字符串作为变量与另一个变量字符串进行比较
- 如何将一个数组的每个元素与另一个元素进行比较(如果存在),然后打印是,否则否
- 将映射的每个键中的数字数据与另一个数值进行比较
- 比较一个链接列表与另一个黑名单与词频列表C++
- 使用访问另一个类字段的比较器priority_queue类字段
- Arduino - 将拆分字符串与另一个字符串进行比较
- 尝试将调用对象与另一个对象进行比较时出现分段错误
- 将一个字符串与另一个字符串进行比较的最佳方法是什么
- 将字符串的一部分与 STDLB 中的另一个字符串进行比较
- 如何将数组的整数与另一个类型为"int"的变量进行比较?
- 将两个大数的总和与另一个大数进行比较
- C++ std::sort 引用另一个列表的自定义比较函数
- C++将一个字符串的索引与另一个字符串进行比较
- 这是一个奇异迭代器吗?如果是,我能否将它与另一个进行比较?
- 当另一个函数使用比较函数进行排序时,如何在类中编写比较函数
- 当一个字符串包含另一个字符串的一部分时比较字符串