草庐IT

definition-lists

全部标签

c++ - 为什么 `std::forward_list::insert_after` 不返回作为其他序列容器插入的第一个元素?

为什么std::forward_list::insert_after不返回first插入的元素作为其他序列容器,例如list和vector。有什么故意的原因吗? 最佳答案 forward_list与其他序列非常不同,insert_after也是如此。为了返回第一个插入的项目,它必须使用额外的时间和空间来保存该元素,而last元素将作为插入算法的一部分可用。不仅如此,将迭代器返回到从范围插入的第一个元素会给你一个迭代器,你可以用它插入到刚刚添加的范围的中间,而范围末尾的迭代器可以让你追加额外的数据.

c++ - 冲突 : definition of wchar_t string in C++ standard and Windows implementation?

Fromc++20032.13Awidestringliteralhastype“arrayofnconstwchar_t”andhasstaticstorageduration,wherenisthesizeofthestringasdefinedbelowThesizeofawidestringliteralisthetotalnumberofescapesequences,universal-character-names,andothercharacters,plusonefortheterminatingL’\0’.Fromc++0x2.14.5Awidestringlite

c++ - 使用boost图形库: how to create a graph by reading edge lists from file

我是boost图形库的新手,我想通过从文件中读取边列表来创建图形。edge_list.dat文件的示例是这样的:...12344545353433432454123345123566...文件的每一行代表图中的一条边,每行中的两个数字是该边对应的节点id。现在我想使用boost图形库从文件edge_list.dat创建一个图形。但是,我事先并不知道图形的大小。我需要一路将顶点添加到图中。然而,像这样为每个顶点创建一个顶点描述符是不切实际的:Graph::vertex_descriptorv0=boost::add_vertex(g);Graph::vertex_descriptorv1

c++ - initializer_list<T> 对 T 的赋值运算符要求

我想知道是否initializer_list要求T有一个赋值运算符。以下structFoo{Foo&operator=(constFoo&)=delete;};std::vectorf={Foo(),Foo()};在clang3.4.2上编译但在VisualStudo2013上失败并显示"errorC2280:'Foo&Foo::operator=(constFoo&)':attemptingtoreferenceadeletedfunction".我假设clang在这里是正确的,但想检查是否不需要T可以分配。 最佳答案 std::

c++ - std::list 和 std::for_each:我的终点在哪里?

考虑以下最小示例:#include#include#includeintmain(){std::list>list;list.push_back([&list](){list.push_back([](){throw;});});std::for_each(list.cbegin(),list.cend(),[](auto&&f){f();});}它编译并在运行时抛出异常。我的猜测是只有第一个lambda由std::for_each执行,但显然我错了:如果我在列表末尾附加另一个lambda,迭代也会到达那个lambda。让我们还原示例(push_front而不是push_back和cr

c++ - SBRM/RAII 用于 std::va_list/va_start()/va_end 使用

我的代码包含如下片段:std::va_listap;va_start(ap,msgfmt);snprintf_bufbuf;consttchar*msg=buf.print_va_list(msgfmt,ap);va_end(ap);它们很短,va_start()和va_end()靠得很近,所以它们不是什么大问题。两者之间的调用异常可能是一个问题(或不是?)。简单测试表明,不允许从没有省略号的函数中调用va_start()。从与va_start()不同的函数调用va_end()是否允许?基本上,我很好奇是否可以对这些调用使用SBRM/RAII习惯用法,即使必须手动调用va_start(

c++ - C++标准文档中的 "terms and definitions"如何解释?

在我研究C++标准(WheredoIfindthecurrentCorC++standarddocuments?)的不同部分时,我想回顾一下“术语和定义”,§1.3。但是,术语和定义是以我无法充分理解或解释的形式提供的,并且文本中也没有给出关于如何解释它们的解释。考虑标准的“术语和定义”部分中定义的第一个术语:1.3.1[defns.argument]argumentactualargumentactualparameterexpressioninthecomma-separatedlistboundedbytheparentheses什么是[defns.argument]指的是什么?

c++ - 枚举 [标签] [ : type] {enum-list} [declarator] in C++ - is this legal?

我正在使用C++中的自定义枚举类型,但它没有很多值。我想尝试减小它们占用的大小,而且我听说enum类型是alwaysintegersbydefault.然后我遇到了MSDNentryonC++enumerations,发现下面的语法很有趣:enum[:type]{enum-list};果然,当我执行以下操作时,它编译出了我想要的(VS2008):enumplane:unsignedchar{xy,xz,yz};现在,您可以从我的枚举常量中看出我不需要太多空间-unsignedchar类型非常适合我的使用。但是,我不得不说,我从未在互联网上的其他地方任何地方见过这种形式——大多数人甚至似

c++ - 如何使用带有 std::initializer_list 的构造函数设计类?

当类具有采用std::initializer_list的构造函数重载时,此重载将优先,即使其他构造函数重载看起来更匹配。Sutter的GotW#1中详细描述了这个问题。,第2部分,以及迈耶斯的EffectiveModernC++,第7项。出现此问题的典型示例是在对std::vector进行大括号初始化时:std::vectorvec{1,2};//Isthisavectorwithelements{1,2},oravectorwithasingleelement2?Sutter和Meyers都建议避免在类设计中initializer_list构造函数重载会导致程序员产生歧义。萨特:Gu

c++ - 使用 boost::copy_graph 从 grid_graph 复制到 adjacency_list

我正在使用boost图形库并尝试初始化MutableGraph以网格的形式开始生活。边缘会在以后的生活中添加和删除,所以我认为adjacency_list是正确的选择。我对BGL的阅读表明,用这些边缘初始化它的明智方法是利用boost::grid_graph通过使用boost::copy_graph从boost::grid_graph复制可以免费为我制作所有初始边缘。我认为这是有道理的-copy_graph来自VertexListGraph模型的拷贝到一个模型MutableGraph,这正是我所拥有的。我最初尝试使用copy_graph的双参数版本,带着模糊的希望,其余部分的默认值会发