jjzjj

c++ - C++ 中 std::vector 的基本问题

C++教科书和线程,例如these说vector元素在内存中是物理上连续的。但是当我们执行像v.push_back(3.14)这样的操作时,我会假设STL正在使用new运算符来获取更多内存来存储新元素3.14引入到载体中。现在假设大小为4的vector存储在标记为0x7,0x8,0x9,0xA的计算机存储单元中。如果单元格0xB包含一些其他不相关的数据,3.14将如何进入该单元格?这是否意味着单元格0xB将被复制到其他地方,并被删除以为3.14腾出空间? 最佳答案 简短的回答是将保存vector数据的整个数组移动到它有空间增长的位置

c++ - 返回 std::string 的函数在没有 return 语句的情况下崩溃,这与返回 int 且没有 return 语句的函数不同

#include#includeusingnamespacestd;stringcrash(){}intnoCrash(){}intmain(){crash();//crashes//noCrash();//doesn'tcrashreturn0;}函数crash()在Mingwg++4.6.2中崩溃,函数noCrash()执行时没有问题。为什么没有return语句返回字符串的函数会崩溃? 最佳答案 两者都是未定义的行为,即使是noCrash也会崩溃。 关于c++-返回std::stri

c++ - std::string 一个容器

std::string是标准c++库中的容器类,仅限于容纳char元素吗? 最佳答案 它是std::basic_string的类型定义,实际上。std::basic_string是专门为字符串操作设计的容器类。此容器也可用于宽字符(wchar_t);对于这种情况,它的typedef将是wstring. 关于c++-std::string一个容器,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques

c++ - memset 导致 std::string 赋值崩溃

我有适用于Windows的代码,但现在我正在移植到MAC,使用Xcode3.2.5C/C++编译器版本GCC4.2,它崩溃了。我已将其缩小为memset调用。如果我注释掉memset它会起作用,如果我把它放回代码中就会崩溃。我的头文件中有一个看起来像这样的结构:typedefstruct{intdeviceCount;struct{#defineMAX_DEVICE_ID256#defineMAX_DEVICE_ENTRIES10std::stringdeviceId;//DevicenametoOpenTransportTypeeTransportType;}deviceNodes[

c++ - std::vector<A> error C2582: 'operator =' 函数在

我使用简单的vectorpush_back到类型A的对象并收到此错误,这是我的代码:classA{public:A(inta,intb,intc);};#include"A.h"................std::vector*vec_objects=newstd::vector();while(....somecondition...){Aa(1,2,3)vec_objects->push_back(a);}出现这个错误:c:\programfiles\microsoftvisualstudio9.0\vc\include\xutility(3159):errorC2582:'

c++ - 从整数值返回固定长度的 std::string

问题->将固定长度的字符串返回给std::string*。目标机器->Fedora11。我必须派生一个函数,它接受整数值并将固定长度的字符串返回到字符串指针;例如->int值在0到-127范围内所以对于int值0->它应该显示000对于值-9->它应该返回-009对于值来说-50->它应该返回-050对于值来说-110->它应该返回-110所以简而言之,所有情况下的长度都应该相同。我做了什么:我已经根据如下所示的要求定义了函数。我需要帮助的地方:我派生了一个函数,但我不确定这是否是正确的方法。当我在Windows端的独立系统上测试它时,exe有时会停止工作,但是当我将此功能包含在Lin

c++ - vector 、迭代器和 std::find

有没有办法在不同的vector中使用不同类型的迭代器?或者,是否有一个函数将vector中元素的位置作为整数返回?std::vector::iteratorit;//Iterator//monsterQueueisavectorit=std::find(bot.monsterQueue.begin(),bot.monsterQueue.end(),object);//Checkdowehavetheobjectinthequeueif(it!=bot.monsterQueue.end())//Ifwedohaveit{bot.monsterDists.at(it)=mobDist;//

c++ - G++ undefined reference std::

我一直致力于将我的一款游戏移植到Linux,但似乎无法弄清楚我收到的错误的原因。该游戏最初是用VisualStudio2010编写的,我已经提取了所有需要的内容(header、cpp、纹理)并正在尝试编译。使用g++-c-oexampleFile.oexampleFile.cpp编译文件工作正常,没有任何错误。然而,在链接时,我遇到了数百个关于std函数的错误,例如:Bmp.o:Infunction`Image::Bmp::Bmp()':Bmp.cpp:(.text+0x58):undefinedreferenceto`std::allocator::allocator()'Bmp.c

C++ std::enable_if

我对std::enable_if很陌生,想知道如何使用它。我有一个模板类:templateclassfoo{}现在我只想在a+b等于10时实例化它。我可以使用std::enable_if使这成为可能吗?第二个问题:如果我在类foo中有一个成员templateclassfoo{intc;}我只想在什么时候有ca=5.我如何使用std::enable_if做到这一点?这是使用std::enable_if的正确情况吗? 最佳答案 template::type>classfoo{};这应该可以完成工作;只需确保在实例化模板时永远不会显式提供

c++ - 为什么 std::vector max_size() 函数会返回 -1?

我有一个std::vectorm_vData;m_vData.max_size()总是返回-1。为什么会这样? 最佳答案 可能是因为您在查看之前将其分配给签名类型。max_size的返回值通常是size_t,这是一个无符号类型。在许多平台上直接转换为int将返回-1。试试下面的方法std::vector::size_typev1=myVector.max_size(); 关于c++-为什么std::vectormax_size()函数会返回-1?,我们在StackOverflow上找到一