如何获取两个迭代器之间的元素总数
How can I get the total number of elements between two iterators?
我编写了一个函数来测试容器中的所有元素是否唯一。
template<class InputIt>
bool all_elements_unique(InputIt first, InputIt last){
std::set<typename std::iterator_traits<InputIt>::value_type> s(first,last);
return s.size() == std::distance(first,last);
}
它有效。然而,从size()
返回的size_t
和从distance()
返回的difference_type
不具有相同的符号
warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
std::distance可能会根据迭代器的方向返回负数。
如果是这样的话,当元素数量超过有符号的最大值时,我如何可靠地获得两个迭代器之间的元素总数?我在找类似std::size的东西,但它需要整个容器。
如果是这样的话,当元素数量超过有符号的最大值时,我如何可靠地获得两个迭代器之间的元素总数?
如果你要处理这么多元素,你真的想每次调用函数时都把它复制到一个集合中吗?
我要么把你的容器作为参考,要么用你原来的方法代替:
template<class Container>
bool all_elements_unique(Container& c) {
std::set<typename Container::value_type> s(std::begin(c), std::end(c));
return s.size() == c.size();
}
或者进行排序并adjacent_find
:
template<class Container>
bool all_elements_unique(Container& c) {
std::sort(c.begin(), c.end());
return std::adjacent_find(c.begin(), c.end()) == c.end();
}
相关文章:
- 计算两个迭代器之间的距离时"Vector Iterators Incompatible"
- 对于C++随机访问迭代器(矢量迭代器),迭代器之间的差异是如何计算的?
- 如果我的容器位于两个现有值之间,那么伪造迭代器类别是否合理
- 迭代器和标量对象之间的未定义行为有什么区别吗?
- 如果我在下面的代码中使用 list 而不是 vector,为什么在我尝试在迭代器之间执行减法的行中编译失败?
- 正则表达式使用提升令牌迭代器在单引号和括号之间提取值
- const矢量和const迭代器之间的差异
- C STL,我想知道地图中的双向迭代器和操作员[]之间有什么不同
- 遍历std ::映射,效果少于迭代器之间的比较
- 如何计算标准::矢量::<int>迭代器和标准::矢量<int>::reverse_iterator之间的距离?
- 映射::擦除:按键擦除或迭代器擦除之间的区别
- 如何获取两个迭代器之间的元素总数
- std::set::迭代器和std::set::const_iterator之间是否存在操作差异
- 一对迭代器之间的子序列的gtest/gmock匹配器
- 检查对象之间的冲突时,列表迭代器不可递增
- 容器末端和指向内部项的迭代器之间的区别.C++
- 迭代器和const_iterator之间的比较是否效率低下
- MapValue 和迭代器 C++ 之间的比较
- C++:对迭代器之间计算距离的类型感到困惑
- 在两个迭代器之间获取“std::string”的子字符串