草庐IT

vector_tostr

全部标签

c++ - 即使根据容量()仍有未使用的空间,std::vector 能否将其数据移动到 emplace_back()处的另一个地址?

是否保证std::vector仅在size()==capacity()并调用push_back()时移动其数据或emplace_back()或者它也可以这样做吗? 最佳答案 规范有点间接。容量指定为:size_typecapacity()constnoexcept;Returns:Thetotalnumberofelementsthatthevectorcanholdwithoutrequiringreallocation.第二部分来自reserve:reserve(size_typen);Remarks:Reallocationi

c++ - 您何时更喜欢使用 std::list<T> 而不是 std::vector<T>?

我从未使用过std::list我。我想知道当我们已经拥有std::vector时人们何时使用它这就像具有连续内存的数组一样。std::vector当我们需要顺序容器时,这似乎是一个完美的选择!所以我的问题是你到底什么时候更喜欢std::list超过std::vector?为什么?你什么时候喜欢std::vector超过std::list?为什么?如果有性能方面的考虑,请也列出它们并附上详细的解释/信息。如果可能,还请引用一些引用资料,以支持您的回答。 最佳答案 Somyquestionis:whenexactlydoyouprefe

c++ - 您何时更喜欢使用 std::list<T> 而不是 std::vector<T>?

我从未使用过std::list我。我想知道当我们已经拥有std::vector时人们何时使用它这就像具有连续内存的数组一样。std::vector当我们需要顺序容器时,这似乎是一个完美的选择!所以我的问题是你到底什么时候更喜欢std::list超过std::vector?为什么?你什么时候喜欢std::vector超过std::list?为什么?如果有性能方面的考虑,请也列出它们并附上详细的解释/信息。如果可能,还请引用一些引用资料,以支持您的回答。 最佳答案 Somyquestionis:whenexactlydoyouprefe

c++ - 为什么要重新分配 vector 拷贝而不是 move 元素?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Howtoenforcemovesemanticswhenavectorgrows?insert、push_back和emplace(_back)会导致std的重新分配::vector。我很困惑地看到以下代码在重新分配容器时复制元素而不是move它们。#include#includestructfoo{intvalue;explicitfoo(intvalue):value(value){std::coutfoos;foos.emplace_back(1);foos.emplace_back(2);}在我的特

c++ - 为什么要重新分配 vector 拷贝而不是 move 元素?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Howtoenforcemovesemanticswhenavectorgrows?insert、push_back和emplace(_back)会导致std的重新分配::vector。我很困惑地看到以下代码在重新分配容器时复制元素而不是move它们。#include#includestructfoo{intvalue;explicitfoo(intvalue):value(value){std::coutfoos;foos.emplace_back(1);foos.emplace_back(2);}在我的特

数组的 C++ vector

为什么会这样:std::pairp={1,2};std::vector>vp={{1,2},{3,4}};但这不是吗?std::arraya={1,2};//stillokstd::vector>va={{1,2},{3,4}};将g++4.5.1与-std=c++0x一起使用,第二行失败:error:couldnotconvert‘{{1,2},{3,4}}’to‘std::vector>’谢谢 最佳答案 不幸的是,std::array没有初始化列表构造函数。实际上,它没有用户定义的构造函数——这个“特性”是C++03的遗留物,在

数组的 C++ vector

为什么会这样:std::pairp={1,2};std::vector>vp={{1,2},{3,4}};但这不是吗?std::arraya={1,2};//stillokstd::vector>va={{1,2},{3,4}};将g++4.5.1与-std=c++0x一起使用,第二行失败:error:couldnotconvert‘{{1,2},{3,4}}’to‘std::vector>’谢谢 最佳答案 不幸的是,std::array没有初始化列表构造函数。实际上,它没有用户定义的构造函数——这个“特性”是C++03的遗留物,在

c++ - std::vector<std::string> 到 char* 数组

我有一个std::vector我需要用于C函数的参数为​​char*foo.我有seenhow转换std::string至char*.作为C++的新人,我正在尝试拼凑如何对vector的每个元素执行此转换并生成char*数组。我见过几个密切相关的SO问题,但大多数似乎都说明了走向另一个方向并创建std::vector的方法。. 最佳答案 您可以使用std::transform如:std::transform(vs.begin(),vs.end(),std::back_inserter(vc),convert);这需要您实现conve

c++ - std::vector<std::string> 到 char* 数组

我有一个std::vector我需要用于C函数的参数为​​char*foo.我有seenhow转换std::string至char*.作为C++的新人,我正在尝试拼凑如何对vector的每个元素执行此转换并生成char*数组。我见过几个密切相关的SO问题,但大多数似乎都说明了走向另一个方向并创建std::vector的方法。. 最佳答案 您可以使用std::transform如:std::transform(vs.begin(),vs.end(),std::back_inserter(vc),convert);这需要您实现conve

c++ - 返回没有拷贝的c++ std::vector?

是否可以在不复制的情况下从函数返回标准容器?示例代码:std::vectorMyFunc();...std::vectorb=MyFunc();据我了解,这会将返回值复制到一个新vectorb中。使函数返回引用或类似的东西可以避免复制吗? 最佳答案 如果您的编译器支持NRVO,那么只要返回对象的函数满足某些条件,就不会进行复制。谢天谢地,这最终被添加到VisualC++2005(v8.0)如果容器很大,这显然会对性能产生重大的+ve影响。如果您自己的编译器文档没有说明它是否受支持,您应该能够将C++代码编译为汇编器(在优化/Rele