草庐IT

back_emplace_iterator

全部标签

c++ - 如何在编译时检查类型是否为 std::vector::iterator?

我遇到一个问题,我需要检测给定类型是否是已知嵌套类型的实例,例如std::vector::iterator在编译时。我想创建类型特征is_std_vector_iterator:#include#includetemplatestructis_std_vector_iterator:std::false_type{};templatestructis_std_vector_iterator::iterator>:std::true_type{};intmain(){return0;}但我收到编译器错误:$g++-std=c++0xtest.cpptest.cpp:7:error:tem

c++ - 为什么 std::regex_iterator 会导致此数据的堆栈溢出?

我一直在使用std::regex_iterator来解析日志文件。我的程序已经运行了几个星期并且已经解析了数百万行日志,直到今天,当今天我针对日志文件运行它并出现堆栈溢出时。事实证明,只有日志文件中的一个日志行导致了问题。有谁知道为什么我的正则表达式会导致如此大规模的递归?这是一个显示问题的独立小程序(我的编译器是VC2012):#include#include#includeusingnamespacestd;std::wstringtest=L"L3T1535679726859[CreateRegistryAction]CreatingREGISTRYAction:\n"L"Ide

c++ - reverse_iterator 适配器

我正在尝试为我的迭代器和const_iterator类实现反向迭代器适配器,但遇到了一些麻烦。如果有人可以指导我解决这个问题,将不胜感激!我的想法是我应该能够从我的rbegin()和rend()函数调用中创建一个反向迭代器reverse_iteratorrbegin();reverse_iteratorrend();const_reverse_iteratorrbegin()const;const_reverse_iteratorrend()const;我在类里面使用了以下typedef:typedefbtree_iteratoriterator;typedefconst_btree_

c++ - 缺少 std::front 和 std::back

C++11中没有std::front和std::back是有原因的吗?有std::begin和std::end所以对我来说,对于实际实例具有等效是有意义的。 最佳答案 std::begin()和std::end()应该适用于所有基本容器(包括C风格数组)。事实上,如果容器支持成员begin()和end()函数,std::begin()和std::end()将调用转发给那些成员函数。但是,并非所有容器都支持front()和back()成员函数。 关于c++-缺少std::front和std

c++ - 获取最接近键的 std::container::iterator

我一直想知道是否可以根据可能存在或可能不存在的起始键遍历map的一部分。如果我有一张map,上面有很多位置的键,我想说,"returnaniteratorsuchthatif_Keydoesn'texist,Iamreturnedtheclosestiteratorbefore_Key"我可以使用它来emplace_hint一个新值,或者循环遍历特定范围的位置,即使搜索键不存在也是如此。我们是否可以通过某种方式轻松使用这种功能? 最佳答案 使用lower_bound然后减少迭代器,在检查它不指向开始迭代器之后,正如AndreKost

c++ - Clang 模块与 std <iterator> 和 <boost/move/iterator.hpp> 交互

(有关我正在使用的特定版本的Boost和Clang的信息,请参阅问题结尾)使用新的实验性-fmodules从master/HEAD在Clang中编译功能,使用如下所示的命令行选项编译以下文件时出现构建错误:#include#include编译命令及错误:anhall@leviathan:/bin/clang++-ofile.o-cfile.cpp--std=c++1z-stdlib=libc++-fmodulesInfileincludedfromfile.cpp:2:Infileincludedfrom/usr/local/include/boost/move/iterator.hp

c++ - 接受 STL_container_type<string>::iterator 的模板化参数

我有一个函数,其中有一个包含字符串的容器(例如vector、set、list),并且给定一个开始迭代器和一个结束迭代器,通过迭代器范围处理字符串。目前函数声明如下:templatevoidProcessStrings(ContainerIterbegin,ContainerIterend);现在这将接受任何符合实现operator*的隐式接口(interface)的类型,前缀operator++以及函数体中的任何其他调用。我真正想做的是像下面这样明确限制输入量的定义(伪代码警告):template::iterator>voidProcessStrings(Container::iter

c++ - 使用 std::back_inserter 时我应该保留内存吗

使用back:inserter时是否需要预留内存?d.reserve(s.size())std::copy(s.begin(),s.end(),back_inserter(d)); 最佳答案 使用std::back_inserter时不需要为容器保留内存。但是,如果您事先知道要插入的元素数量并希望防止重复分配,您可以预留内存。 关于c++-使用std::back_inserter时我应该保留内存吗,我们在StackOverflow上找到一个类似的问题: htt

c++ - 将 std::pair 迭代器转换为 boost::iterator_range

我有一个std::multimap,我想从equal_range创建一个boost::iterator_range。我在文档中找不到简单的方法,所以我尝试了以下方法:typedefstd::multimapMap;Mapmap;...boost::iterator_ranger(map.equal_range(2));令人惊讶的是,它有效(使用GCC4.1.2)。我很好奇它是如何工作的。我发现iterator_range构造函数没有重载可以执行此操作,并且multimap::iterator_range显然没有可以返回Boost范围的重载。 最佳答案

c++ - vector.push_back 右值和复制省略

我像这样push_back一个临时对象到一个vector中,vectorvec;vec.push_back(A("abc"));编译器是否会应用复制省略将临时A("abc")直接构造到vector中,以便A'将临时对象插入vec时不会触发s复制构造函数。 最佳答案 如果你有一个支持右值引用的编译器,它会被移动到vector中,这有时非常便宜。另一种方法是直接在vector中构造对象,这可以通过vec.emplace_back("abc");来完成。这只会调用一个构造函数。这两个都是C++11的特性。此处不允许省略复制,因此如果没有这