草庐IT

stdvector

全部标签

c++ - vector::resize 增加多少容量?

据我所知,当vector::resize需要增加时,C++标准并未明确指定如何增加vector容量。但是有没有“典型”的实现呢?具体来说:我不知道我的vector需要多大。此外,元素以随机顺序出现。所以对于每个元素我都有这个:if(index>=vector.size()){vector.resize(index+1);}vector.at(index)=element;如果元素以递增的索引顺序出现,vector容量是否会在每次调用调整大小时增加一(在典型的实现中)?我希望不会... 最佳答案 该标准不保证重复调用resize()的

c++ - 交换 std::vector 作为函数参数

我想交换一个std::vector作为函数参数,这样就不必复制vector。像这样:function(std::vector().swap(my_vector));或者在我的例子中是这样的:std::make_pair(0,std::vector().swap(my_vector));当然std::vector::swap返回void,而不是创建的vector。有办法吗? 最佳答案 使用任何现代编译器,然后您可以使用std::move,它获取您的vector并将其作为右值返回:function(std::move(my_vector

c++ - 将继承与基于 stdvector 的植绒结合使用

目前我正在完成一项任务,为此我必须制作一个具有不同子类且行为不同的植绒系统。我正在使用OpenFrameworks和C++。我对开放框架和C++还很陌生。作为基础,我使用了这段代码:https://sites.google.com/site/ofauckland/examples/ofxflocking-example但问题是,这段代码的结构与我习惯的不同;使用“new...”创建新的类对象我的问题是,如何使用两个植绒类?开始时,首先只使用不同的颜色。到目前为止我添加的子类之一是:classTeam1:publicBoid{public:Team1():Boid(){};Team1(i

c++ - std::vector push_back() 语义

我知道std::vector中的push_back在末尾放置了作为参数传递的对象的拷贝。让我们考虑这个简单的例子classFoo{public:Foo(inti=-1):i_(i){std::cout还有这段代码voidtestObjects(){std::vectorvFoo;for(inti=0;i我得到的结果是:Foo:100FoocopyCTOR:100i=0vectorsize=1~Foo:100Foo:101FoocopyCTOR:100FoocopyCTOR:101~Foo:100i=1vectorsize=2~Foo:101Foo:102FoocopyCTOR:100F

c++ - std::transform 以两个 std::vector 和一个常量作为参数

我想使用std::transform做一些类似于binary_op的事情,但有一个额外的常量,例如,得到两个vector的乘积:x1=(10,20,30,40,50)和x2=(2,4,6,8,10),我们可以写成:#include#include#includedoublemultiply(doublex,doubley){returnx*y;}intmain(){std::vectorx1;std::vectorx2;for(inti=1;i::iteratorit=x1.begin();it!=x1.end();++it)std::cout以上代码将按元素乘以x1和x2并返回(20

c++ - std::find 用于继承对象 C++

1.所以我有:ClassA;ClassB:publicA;ClassC:publicB;2.还有一个B类型的指针vector:vectorvec;3.然后:C*ptr=newC();vec.push_back(ptr);那么问题来了,这样用std::find靠谱吗?std::find(vec.begin(),vec.end(),prt);此外,使用this->指针进行搜索可以吗?std::find(vec.begin(),vec.end(),this);//insideofatypeCobject提前致谢。 最佳答案 是的,这是安全

c++ - 如何在 C++ 中正确地静态转换 vector ?

我有一段代码,在函数的末尾,我需要将数组的所有元素从int转换为double,以便能够在退出函数之前执行最终的push_back。我现在的代码是:templateclassA{typedeftypenamestd::arrayArrayInt;typedeftypenamestd::arrayArrayDouble;typedeftypenamestd::vectorVectorDouble;/*...*/foo(){/*...*/ArrayIntmyArrayInt;ArrayDoublemyArrayDouble;VectorDoublemyVectorDouble;/*Initi

c++ - 为什么 erase-remove 习语不适用于反向迭代器

我的目标是尝试解决这个问题:Removingallemptyelementsinavectorfromend.使用erase-remove习语。想法是在给定的std::vector中删除从末尾开始的所有空元素(等于空白)字符串。当找到非空元素时,应停止删除元素。例子:vec={"","B","","D","E","","",""};删除后:vec={"","B","","D","E"};这是我尝试过的解决方案:#include#include#include#include#includeintmain(){std::vectorvec={"","B","","D","E","",""

c++ - 是否可以重载模板函数以与 std::vector 的元素一起使用?

我正在尝试让一个函数采用通用std::vector(templatestd::vector,然后调用一个模板函数,该函数在其所有元素上都具有针对特定(抽象)类型的特化。我正在尝试弄清楚如何使用专用版本,同时仍然能够使用通用版本,但我没有成功。我使用的是visualstudio2019。这是我的代码:#include#include//theabstracttypestructFoo{virtualintbar(unsignedint)const=0;};//The'templatefunction'Imentionedtemplatevoiddo_something_with_an_e

c++ - 返回 std::vector 时缺少元素

我正在用C++编写一个函数,从理论上讲,它应该接受用户输入并将此输入根据空格拼接成段,然后将这些段作为vector返回。我目前正在做的是在输入字符串上使用strtok()以用空格分隔单词。对于每个“单词”,我将其插入缓冲区vector。遍历每个单词后,我返回vector。所以这是我到目前为止的代码:#include#include#include#includestd::vectortokenize(std::stringinput_,charconst*delims="\t\r\n\a"){char*input=(char*)input_.c_str();std::vectortk_