我写了一个函数来测试容器中的所有元素是否唯一。
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 的东西,但它需要整个容器。
vector<char>
(甚至是臭名昭著的vector<bool>
)。 - Tony Delroyvector<char>
理论上可以占用超过一半的总内存。但是,你上次遇到这种情况是什么时候呢?(vector<bool>
甚至可能“溢出”size_t
!我们生活在一个多么可怕的世界啊。) - Baum mit Augen