草庐IT

list_type

全部标签

c++ - 这是 "new auto(enum_type)"的 Microsoft VC++ 2010 编译器错误吗

环境:MicrosoftVisualStudio2010withSP1Preminum(10.0.40219.1SP1Rel),WindowsXPSP3VC10编译器支持auto关键字,但推导的类型相关信息对于枚举似乎并不总是正确的。例子:#includeenumfruit_t{apple=100,banana=200,};intmain(){constautopa=newauto(banana);constautopb=newfruit_t(banana);static_assert(std::is_same::value,"notsame!");deletepb;deletepa;

c++ - 删除 std::list 中的项目,同时保留分配的项目

我构建了一个std::list定期合并在一起的项目(图形组件结构)。这个想法是,如果我发现一个连接两个组件的节点,它们就会变成一个单独的组件,而我的列表会枚举我的组件。每个组件都有一个指向其“父”组件的句柄(在本例中为std::list::iterator),该句柄在合并后设置。通过这种方式来确定特定节点所属的组件,我沿着这条链向上走。最后我要找的是std::list上的操作这让我可以使用项目N的迭代器,并将其从列表中删除但不释放它:列表其余部分的结构的修改方式与正常删除它的方式完全相同。最好是比重新分配项目、从列表中复制它并调用真正的remove更简单的东西。或erase.也许我可以

c++ - 在 vector 图上使用 initializer_list

我一直在尝试初始化>的map使用新的0X标准,但我似乎无法获得正确的语法。我想制作一个带有key:value=1:的单个条目的map#include#include#includeusingnamespacestd;map>A={1,{3,4}};....它在使用gcc4.4.3时出现以下错误:error:nomatchingfunctionforcalltostd::map>,std::less,std::allocator>>>>::map()编辑按照Cogwheel的建议并添加额外的大括号,它现在编译时带有警告,可以使用-fno-deduce-init-list标志消除该警告。这

C++ 模板 "class type"错误

我一直在研究一个链表模板类来对各种变量做同样的事情,并设法解决了大部分问题。除了编译时,我得到这些:g++-Wall-otemplate_testtemplate_test.cppInfileincludedfromtemplate_test.cpp:1:0:LinkedList.h:50:11:error:declarationof‘classType’LinkedList.h:7:11:error:shadowstemplateparm‘classType’LinkedList.h:51:30:error:invaliduseofincompletetype‘classLinked

C++11 initializer_list 构造函数标记为 "explicit"

我能否将explicit与init-list构造函数一起使用,以确保像{a}这样的表达式不会导致意外的隐式转换?还有一个想法:应该我担心吗?编写{a}比简单地编写a不太可能出错,但另一方面,从代码中我们可能仍然不清楚我们正在构建一个通过隐式转换对象。classFoo{explicitFoo(std::initializer_listilist){/*...*/}}; 最佳答案 你不能。它确实导致意外的隐式转换。但是,意外的隐式转换是不允许的,编译器将拒绝您的程序。然而,这不会阻止编译器选择或考虑它。示例voidf(Foo);void

c++ - 为什么 boost::call_traits<double>::param_type 是 "const double&"而不是 "double"

我在win32program@windows7机器上使用代码“boost::call_traits::param_type”。令我惊讶的是,它不是“double”而是“constdouble&”。我认为所有原始类型都适合对函数参数使用“按值传递”,这不是常识吗?因为很多人会使用is_pod来判断是否使用引用,不是吗? 最佳答案 根据doc,该优化显然只适用于“小型”内置类型。.快速浏览source,看起来“小”类型被认为是满足sizeof(T)的类型.在32位机器上,这显然不包括double.在某些情况下,将参数传递为double可

c++ - 使用 boost::assign::list_of 构造 std::vector 时的歧义

这段代码:std::vector(boost::assign::list_of(1)(2)(3));给出错误:main.cpp:Inmemberfunction'void::RequestHandler::processRequest(Foo&,Bar,unsignedint,unsignedint*,constchar*,boost::shared_ptr&)':main.cpp:450:error:callofoverloaded'vector(boost::assign_detail::generic_list&)'isambiguous/4.4.2/bits/stl_vecto

python - 关于boost-python : dyld: Symbol not found: _PyBaseObject_Type

当我运行我的代码时,我遇到了一个关于boost-python的问题。就像这样:dyld:Symbolnotfound:_PyBaseObject_TypeReferencedfrom:/opt/local/lib/libboost_python-mt.dylibExpectedin:flatnamespace我的项目几个月前就可以正常运行了。但是现在,当我重新配置环境时,它无法运行。-几个月前,我用homebrew配置环境,就像这样:brewinstallboostbrewinstallpythonbrewinstallboost-pythonbrewinstallopencv(Myp

c++ - initializer_list 返回的生命周期延长

所以我有一个返回类型为auto的lambda我在支持initializer_list的阵列方面遇到问题在这里被摧毁:constautofoo=[](constauto&a,constauto&b,constauto&c){return{a,b,c};};我将像这样使用lambda:autobar=foo(1,2,3);for(constauto&i:bar)cout我正在从事的一项工作将所有lambda表达式作为单一语句作为其编码标准的一部分(请随意表达您的愤怒。)我认为我可以通过以下方式解决这个问题:给予foovectorint的返回类型,但这搞砸了它的通用性:constautofo

c++ - 为什么遍历比合并两个排序的 std::list 更耗时?

令我惊讶的是,遍历比合并两个已排序的std::list花费的时间多12%。由于合并可以被认为和实现为连续的元素比较、列表拼接和迭代器遍历两个分离的排序链表。因此,遍历不应比合并它们慢,尤其是当两个列表足够大时,因为迭代元素的比例正在增加。但是,结果好像和我想的不符,我是这样验证上面的想法的:std::listlist1,list2;for(intcnt=0;cntdiff=std::chrono::system_clock::now()-start;std::cout附言。icc足够聪明,可以消除选项2。尝试sum+=num;并打印出sum。这是perf的输出:(测量的时间在不使用pe