草庐IT

Iterator

全部标签

c++ - 获取文件内容并将其放入 C++ 中的字符串中

我正在使用OpenGL,我需要将VertexShader.glsl的内容放入std::string我看过相关的StackOverflow帖子,但我真的不知道如何将数据类型和内容匹配在一起以使其工作。以Readfile-contentsintoastringinC++为例#include#includeintmain(intargc,char**argv){std::ifstreamifs("myfile.txt");std::stringcontent((std::istreambuf_iterator(ifs)),(std::istreambuf_iterator()));retur

c++ - 面对抛出移动构造函数/赋值运算符,std::vector::emplace() 是否真的提供了强大的异常保证?

Accordingtocppreference.com,std::vector::emplace()无条件提供强异常保证:Ifanexceptionisthrown(e.g.bytheconstructor),thecontainerisleftunmodified,asifthisfunctionwasnevercalled(strongexceptionguarantee).但是,在GCC7.1.1的实践中似乎并非如此。以下程序:#include#includestructugly{inti;ugly(inti):i{i}{}ugly(constugly&other)=defaul

c++ - 如何使用 C++ Boost 的 regex_iterator()

我正在使用Boost来匹配字符串中的子字符串。Io遍历结果,我需要使用regex_iterator().那是我找到的唯一用法示例,但我不理解回调。有人可以给我一个函数的用法示例吗?让我们假设我的输入文本是:"HelloeverybodythisisasentenseBlabla14..yesdate04/15/1986"我想得到:"Hello""everybody""this""is""a""sentense""bla""yes""date" 最佳答案 如果您不理解示例的唯一部分是回调,请考虑:std::for_each(m1,m2

c++ - 在 C++ 中命名和使用迭代器的常规约定是什么?

我觉得我命名和使用迭代器的方式不专业。我的意思是我“觉得”我应该给它们起别的名字,但我总是根据“it_”前缀来命名它们,过了一会儿,在一个长函数中,名字开始看起来都很相似.此外,我总是想知道我是否正在以一种“奇怪”的方式做事,而我只是因为不知道更好而学会了这种方式。例如,如果我遍历一个map以显示它的所有键/值对,我会这样做:map::const_iteratorit=layout.begin();for(;it!=layout.end();++it){   coutfirstsecond我看到有些人称他们的迭代器为“iter”——我看到了其他的循环方式。有没有一种超越风格的惯例,只是

c++ - 无法在 boost 1.57 中编译 boost/any_iterator.hpp

在(尝试)升级VS2012项目以使用boost1.57之后,我无法再编译——boost/any_iterator.hpp中出现大量错误消息(见下文)。作为测试,我创建了一个新项目,其中只包含一个空的主函数和#include"boost/any_iterator.hpp"并得到了相同的错误集。这是它提示的代码://snippetfromboost/any_iterator.hpptemplateclasspostfix_increment_proxy>{//...};同一文件中还有另一个类遵循相同的模式并生成相同的错误。range_detail::any_iterator在文件中稍高一点

c++ - 检查/修改迭代器 "constness"

我有两个半密切相关的问题。给定一个作为模板参数传递的STL迭代器类型:如何判断类型对应的是常量迭代器还是非常量迭代器?替代1.,如何强制(例如使用enable_if)此类型对应于非常量迭代器?如何从非常量迭代器获取迭代器的const-版本(反之亦然)?[注意:已在thispost中回答;毫不奇怪,你不能。]这个问题来自哪里:我写了一个小类来促进vector上的算术/关系/代数运算(vector我的意思是一维固定大小的数据,而不是STLvector)。我没有强加一个特定的数据容器,而是定义了一个接口(interface)并派生了几个可能的容器,这些容器基本上“包装”了各种存储数据的方式。

c++ - 如何使用 std::copy 读取任意数量的值?

我正在尝试编写与此相反的操作:std::ostreamouts;//properlyinitializedofcoursestd::setmy_set;//dittoouts(outs));应该是这样的:std::istreamins;std::set::size_typesize;ins>>size;std::copy(std::istream_iterator(ins),std::istream_iterator(ins)???,std::inserter(my_set,my_set.end()));但我坚持使用“结束”迭代器——输入交互器不能使用std::advance并且我也不

c++ - 为什么 std::make_move_iterator 适用于 vector<string> 但不适用于 vector<int>

我期待std::make_move_iterator总是会move内容,但似乎不会。看起来是在vector中move元素但不在vector.请看下面的代码片段:#include#include#include#includevoidmoveIntVector(){std::coutv1;for(unsignedi=0;iv2(std::make_move_iterator(v1.begin()+5),std::make_move_iterator(v1.end()));std::coutv1;for(unsignedi=0;iv2(std::make_move_iterator(v1.

c++ - 使用映射迭代器编译错误

在我的头文件中,我包含了std::map并使用了适当的命名空间。我的成员之一是:mappT_Spam;在我的.cpp文件中,我尝试做一些我现在经常做的事情:for(map::iteratorit=pT_Spam.begin();it!=pT_Spam.end();it++){/*code*/}上面甚至在cplusplus.com上使用std::map的例子中提到过。尽管我在代码的其他部分做了几乎相同的操作而不会导致编译错误,但在这一行我从Cygwin收到以下错误:error:conversionfrom`std::_Rb_tree_const_iterator>'tonon-scala

c++ - ostream_iterator vs for each 循环效率

我看到这个用户postyesterday.我认为这是输出vector的一种很酷的方式。所以我输入了一个示例并问自己这与foreach循环相比如何?templatevoidprintVectorO(std::vector&v){std::coutost(std::cout,"");std::copy(begin(v),end(v),ost);std::cout(time);std::coutvoidprintVectorC(std::vector&v){std::cout(time);std::cout我用了3个vector来测试这个:std::vectordoubles={3.15,2