草庐IT

pairing_iterator

全部标签

C++ : Running time of next() and prev() in a multiset iterator?

应用next()的时间复杂度是多少?和prev()multiset::iterator上的函数类型对象,其中对应的多重集包含N元素?我知道在STL中,多重集被实现为平衡的二叉搜索树,因此我希望每次操作的时间复杂度为O(logN)(在最坏的情况下),以防我们只是遍历树直到我们找到合适的值,但我有预感这应该是平均O(1)。但是如果树的实现如下-插入元素时x在平衡二叉搜索树中,我们还可以检索到树中小于x的最大数和大于x的树中的最小数。在O(logN)中。因此理论上,我们可以让树中的每个节点都维护指向其next的指针。和prev元素,以便next()和prev()然后在每个查询中以恒定时间运行

c++ - 在 C++17 中,为什么关联容器有一个 `erase` 成员函数(非 -`const` ) `iterator` ?

见,例如,http://en.cppreference.com/w/cpp/container/map/erase在C++03中有三个重载:voiderase(iteratorpos);voiderase(iteratorfirst,iteratorlast);size_typeerase(constkey_type&key);在C++11中,第一个和第二个重载被更改为采用const_iterator以便可以使用iterator或const_iterator调用它们>。第一个重载也得到了改进,它让迭代器在删除后将迭代器返回到元素:iteratorerase(const_iterator

C++ istream_iterator 不是 std 的成员

谁能告诉我为什么我在编译时写的下面这段代码一直在提示istream_iteratorisnotamemberofstd请你告诉我吗?谢谢大家#include#include#include#include#include#include#include//#includestructfield_reader:std::ctype{field_reader():std::ctype(get_table()){}staticstd::ctype_base::maskconst*get_table(){staticstd::vectorrc(table_size,std::ctype_bas

c++ - 文学编码与。 std::pair,解决方案?

作为大多数程序员,我钦佩并尝试遵循Literate编程的原则,但在C++中,我经常发现自己使用std::pair来完成大量常见任务。但是std::pair是,恕我直言,文学编程的邪恶敌人......我的意思是,当我回到一两天前编写的代码时,我看到了对std::pair的操作(通常作为迭代器),我不禁想知道“iter->first和iter->second是什么意思???".我猜其他人在查看他们的std::pair代码时也会有同样的疑问,所以我想知道,有没有人想出一些好的解决方案来恢复使用时的读写能力std::pair? 最佳答案 s

c++ - 如何初始化 const std::pair?

假设我有一个:#includeusingnamespacestd;typedefpairmy_pair;如何初始化constmy_pair? 最佳答案 使用它的构造函数:constmy_pairp(1,2); 关于c++-如何初始化conststd::pair?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1231788/

c++ - 从迭代器获取 const_iterator

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Obtainingconst_iteratorfromiterator我想写一个返回相应const_iterator的元函数来自iteratortemplatestructget_const_iterator{typedef???type;};get_const_iterator::type必须是constint*get_const_iterator::type必须是constint*get_const_iterator::type必须是constint*或constint*const,我不在乎get_con

c++ - 为什么 std::pair<A,B> 与 std::tuple<A,B> 不同? (真的没有办法吗?)

为什么是std::pair与std::tuple不同?不能只用一个代替另一个总是感觉很奇怪。它们在某种程度上是可转换的,但有一些限制。我知道std::pair需要有两个数据成员Afirst和Bsecond,所以它不能只是std::tuple的类型别名.但我的直觉说我们可以专攻std::tuple,即正好有两个元素的元组,等于标准要求的定义std::pair成为。然后将其别名为std::pair.我想这是不可能的,因为它太简单了以至于没有想到,但是例如在g++的libstdc++中并没有这样做(我没有查看其他库的源代码)。这个定义的问题是什么?是否“只是”会破坏标准库的二进制兼容性?

c++ - std::pair: 过于严格的构造函数?

我偶然发现了新的std::pair的一个令人惊讶的行为。构造函数,它是在C++11中引入的。我在使用std::pair>时发现了这个问题,它发生了,因为std::atomic既不能复制也不能移动。在下面的代码中,我替换了std::atomic与foobar为了简化。以下代码编译良好,使用GCC-4.9和Clang-3.5(有和没有libc++):structfoobar{foobar(int){}//implicitconversion//foobar(constfoobar&)=delete;};std::pairp{1,2};这种行为是预期的。但是,当我删除foobar的复制构造函

c++ - 为什么 std::count(_if) 返回 iterator::difference_type 而不是 size_t?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhydoestheC++standardalgorithm“count”returnaptrdiff_tinsteadofsize_t?标准C++中有std::count/std::count_if算法。templatetypenameiterator_traits::difference_typecount(InputIteratorfirst,InputIteratorlast,constT&value);templatetypenameiterator_traits::difference_typec

c++ - 检查迭代器的类型是否为 reverse_iterator

有没有办法检查作为arg传递给fnc的迭代器是否是reverse_iterator?我可以使用任何迭代器特征函数吗? 最佳答案 用偏特化来写很简单:#include#includetemplatestructis_reverse_iterator:std::false_type{};templatestructis_reverse_iterator>:std::true_type{};尽管如下所述,这并不能处理“反向-反向”迭代器的(恕我直言不太可能)情况。Bathsheba的答案中稍微不那么琐碎的版本正确处理了这种情况。