草庐IT

back_emplace_iterator

全部标签

c++ - 为什么 istream_iterator<string>(ifstream ("test.txt")) 会导致错误?

我尝试编写代码从名为“test.txt”的文件中读取字符串并将字符串写入标准输出。下面的代码运行良好:intmain(){usingnamespacestd;ifstreamfile("test.txt");copy(istream_iterator(file),istream_iterator(),ostream_iterator(cout,""));}但是,通过此修改,代码不再编译:intmain(){usingnamespacestd;copy(istream_iterator(ifstream("test.txt")),//(),ostream_iterator(cout,""

c++ - 我应该用 emplace_back 替换所有对 push_back 的调用吗?

在我的C++应用程序中,我大量使用像vector这样的STL容器。对push_back的调用很多,我一直担心不必要的构造和复制操作。我的应用程序非常低级,我非常关心CPU和内存使用情况。我是否应该将所有对push_back的调用替换为对emplace_back的调用?我正在使用VisualStudio2013。 最佳答案 我将对push_back的所有调用替换为对emplace_back的调用,并注意到以下内容:RAM使用量减少了大约20%(更新:这可能是由于其他影响)CPU使用率没有变化二进制文件稍小(x64)没有兼容性问题根据这

c++ - string pop_back 是如何在常数时间内实现的?

std::stringpop_back():移除字符串的最后一个元素在C++规范中说C++11字符串类函数pop_back具有常数时间复杂度。(更准确地说-未指定但通常不变)http://www.cplusplus.com/reference/string/string/pop_back/除此之外,我阅读了C++11规范草案,据说pop_back等于str.erase(str.length()-1)。据我所知,删除功能只是分配新的内存量并将剩余的元素(未删除)复制到该内存中,这将花费线性时间。鉴于此,pop_back如何在恒定时间内完成。 最佳答案

C++ : double iteration through map

我想遍历一个map,但内部循环只会遍历元素的上半部分。使用vector它看起来像这样:for(autoelement1=myVector.begin();element1!=myVector.end();++element1){for(autoelement2=element1+1;element2!=myVector.end();++element2){//mystuff}}但是对于mapelement1+1返回错误nooperatormatchesthisoperand..我相信这是因为元素在map中没有排序.那么我怎样才能正确地做到这一点呢?我目前正在使用这种需要在每个循环中进行

c++ - 使用带有 split_iterator 的分类器

关于boost字符串算法,我似乎遗漏了一些东西。我正在尝试将split_iterator与使用Clasifier作为拆分点一起使用。所以,例如,我希望能够做这样的事情:make_split_iterator(str,is_space);但是make_split_iterator需要一个Range和一个Finder。所以我需要的是找到一些序列来从分类器创建查找器。有谁知道如何做到这一点,或者甚至可能吗? 最佳答案 您可以使用token_finder,如make_split_iterator(str,token_finder(is_sp

c++ - vector 错误,无法使 push_back 工作

这只是未注释的代码片段。打包vector一直在push_back()处导致错误,我不太清楚为什么:编辑:已更新为vector*>>packing=newvector>>();但是,即使调整了模板,仍然存在分配器错误。nomatchingfunctiontocallstd::vector,std::allocator>>::push_back(BinTreeNode>>&BinTree>*Huffman::buildTree(constvector>&tokens){BinTreeNode>*g1=newBinTreeNode>();BinTreeNode>*g2=newBinTreeN

c++ - istream_iterator cin 初始化等待输入

我有这个代码片段。istream_iterator对象仅被定义而未被使用,因此我预计它不会执行任何操作并且应用程序会立即完成。但是当我运行应用程序时,在我提供一些输入之前它不会完成。为什么?我在ArchLinux上编译它:gcc4.7.1,命令:g++-std=c++11filename.cpp#include#includeusingnamespacestd;intmain(intargc,char*argv[]){istream_iteratorinput(cin);return0;} 最佳答案 按照标准,24.6.1.1ist

c++ - 为什么 boost filter_iterator 有奇怪的 make_filter_iterator 函数?

在经历了一些痛苦之后,我设法拼凑了这个boostfilter_iterator的最小示例usingnamespacestd;std::functionstlfunc=[](uint32_tn){returnn%3==0;};intmain(){vectornumbers{11,22,33,44,55,66,77,3,6,9};autostart=boost::make_filter_iterator(stlfunc,numbers.begin(),numbers.end());autoend=boost::make_filter_iterator(stlfunc,numbers.end

c++ - 为什么我不能将 string::back 分配给 string?

我写了一个简单的程序:获取string1的最后一个字符并将其分配给string2。就像:#include#includeintmain(intargc,charconst*argv[]){std::strings1="abc!";std::strings2=s1.back();std::cout但是,我得到一个编译错误:conversionfrom‘__gnu_cxx::__alloc_traits>::value_type{akachar}’tonon-scalartype‘std::__cxx11::string{akastd::__cxx11::basic_string}’req

c++ - map<T,T>::iterator 作为参数类型

我有一个带有私有(private)映射成员的模板类templateclassMyClass{public:MyClass(){}private:std::mapmyMap;}我想创建一个接受映射迭代器的私有(private)方法voidMyFunction(std::map::iterator&myIter){....}但是,这会出现编译错误:标识符“迭代器”。我不需要传递一个抽象迭代器,因为MyFunction知道它是一个映射迭代器(并且只会用作myMap的交互器)并且会这样对待它(访问和修改myIter->second)。将myIter->second传递给MyFunction是不