草庐IT

STL_container_type

全部标签

c++ - STL operator= Visual Studio 2010 的行为发生变化?

我正在尝试使用VisualStudio2010(C++)编译QtScriptGenerator(gitorious),但遇到了编译错误。在寻找解决方案的过程中,我偶尔会看到自VS2008以来由于VS2010的STL实现的变化和/或c++0x一致性变化而引入的编译破损。知道下面发生了什么,或者我该如何解决它?如果有问题的代码似乎是QtScriptGenerator的,我想我会更容易修复它。但在我看来,有问题的代码可能在VS2010的STL实现中,我可能需要创建一个解决方法?附言。我对模板和STL很陌生。我有嵌入式和控制台项目的背景,这些项目直到最近才经常被避免以减少内存消耗和交叉编译器风

c++ - 将 "dumb"函数重构为具有容器迭代器的通用 STL 样式

我已经设法了解了C++的一些功能(for_each、映射函数、使用迭代器...),但是用于接收通用容器和迭代器的模板和函数参数列表的构造仍然让我难以理解。我有一个实际的例子,希望有人能为我说明:采用以下函数处理传入的std::vector并构建进程的许多数据点/迭代的运行总和:/*thefor-loopmethod-notverysavvy*/voidUpdateRunningTotal(int_vec&total,int_vec&data_point){for(inti=0;i;int_vecrunning_total(V_SIZE,0);//createacontainertoho

C++ 编译错误枚举 "does not name a type"

以下代码:foo.h#include"bar.h"classfoo{public:enummy_enum_type{ONE,TWO,THREE};foo();~foo(){}};foo.cppfoo::foo(){inti=bar::MY_DEFINE;}酒吧.h#include"foo.h"classbar{public:staticconstintMY_DEFINE=10;foo::my_enum_typevar;bar(){};~bar(){};};让g++编译器提示my_enum_type“没有命名类型”。为什么?所有header都有多个包含定义(为清楚起见,此处未显示)。谢谢

C++ STL - 为什么使用 !(w < *i) 而不是 (w==*i)

vectorvw;//populatevwsort(vw.begin(),vw.end());Widgetw;vector::iteratori=lower_bound(vw.begin(),vw.end(),w);if((i!=vw.end())&&!(w这是我的理解:*i从lower_bound的返回值总是不小于w的返回值。换句话说,w问题来了,为什么不直接使用下面的条件进行校验呢?if((i!=vw.end())&&(w==*i))//whynotuse(w==*i)?//foundwinvw谢谢 最佳答案 因为隐式接口(in

C++ STL:将派生虚拟类用作 std::sort() 的 "Strict Weak Ordering"

我使用std::sort()撞墙了。我有一个纯虚类(名为Compare),方法的调用者派生自该类(名为MyComp)。我将纯虚拟类用于我的API原型(prototype):voidObject::DoSort(Compare&comp){std::sort(this->mKeys.begin(),this->mKeys.end(),comp);}来电者:classMyComp:publicCompare{booloperator()(constRow*r1,constRow*r2){...}}cmp;...obj->DoSort(cmp);Linux上的g++编译器提示:“无法分配类型

c++ - STL有hashmap数据结构吗?

我使用了TR1中的unsorted_map。我从来不知道STL中的任何数据结构都是hashmap。我的同事坚持认为STL有hashmap,他不能(或不愿意)为我找到它。有人可以判断这个论点吗?谢谢。 最佳答案 标准C++98没有散列映射,但有很多STL实现,像原来的SGIimplementation,确实有一个hash_map类。 关于c++-STL有hashmap数据结构吗?,我们在StackOverflow上找到一个类似的问题: https://stack

c++ - const decltype(*std::begin(container))& val 不会使 val const?

这段代码:std::vectorints(5,1);std::for_each(ints.begin(),ints.end(),[](constdecltype(*std::begin(ints))&val){val*=2;});在VisualStudio2010中编译和运行得很好,并且修改容器中的每个值,就像没有const关键字一样。这是编译器中的错误吗,因为预期的行为是val是不可修改的?(换句话说,我希望它不会编译,但它会编译)更新:std::for_each(ints.begin(),ints.end(),[](conststd::remove_reference::type&

c++ - 编译器警告 : lambda return type cannot be deduced

考虑这个例子:#include#includeintmain(){std::stringstr="abcde4fghijk4l5mnopqrs6t8uvwxyz";std::stringstr2;std::remove_copy_if(str.begin(),str.end(),std::back_inserter(str2),[](char&c){if(std::isdigit(c))returntrue;//使用GCC4.6.1,这可以很好地编译并打印出预期的输出(字母表),但我收到一条警告说“只有当return语句是函数体中的唯一语句时,才能推导出lambda返回类型”.现在,我

c++ - VS2010 中的 "redefinition; different type modifier"

我正在尝试编译我在visualstudio中下载的一些代码。该代码适用于msvc6,我将其导入VS2010。该代码用于通过编译一个DLL来为labview提供ASIO支持。见here对于整个代码。构建时出现以下错误:“错误C2373:‘_pctype’:重新定义;不同的类型修饰符。”代码片段如下:unsignedshort_Ints[512];unsignedshort*_pctype=_Ints;如果有人要从我提供的链接中引用代码包,这是来自文件GenMonCIN.c 最佳答案 错误消息试图告诉您_pctype已在其他地方定义。它

c++ - 使用 GCC 的函数检测,为什么使用 C++ STL 容器或流 I/O 会导致段错误?

我最近了解到使用GCC的代码生成功能(特别是-finstrument-functions编译器标志)可以轻松地向我的程序添加检测。我认为它听起来很酷,并在以前的C++项目中尝试过。在对我的补丁进行了几次修改之后,我发现每当我尝试使用STL容器或使用C++流I/O打印到标准输出时,我的程序都会立即因段错误而崩溃。我的第一个想法是维护一个std::list的Event结构typedefstruct{unsignedcharevent_code;intptr_tfunc_addr;intptr_tcaller_addr;pthread_tthread_id;timespects;}Event