草庐IT

push_back

全部标签

C++:迭代 STL 容器的正确方法

在我的游戏引擎项目中,我大量使用了STL,主要是std::string和std::vector类。在很多情况下,我必须遍历它们。现在,我这样做的方式是:for(unsignedinti=0;i我的做法是否正确?如果不是,为什么,我应该怎么做?在这个实现中,size()真的在每个循环周期都执行了吗?性能损失可以忽略不计吗? 最佳答案 C++11有一个新的容器感知for循环语法,如果您的编译器支持新标准,则可以使用它。#include#include#includeusingnamespacestd;intmain(){vectorvs

c++ - std::vector 中的重复元素

我有一个std::vector,我想检查其中的所有元素。如果某个元素出现不止一次,我会发出错误信号。我是这样做的:std::vectortest;test.push_back("YES");test.push_back("YES");for(inti=0;i1){DCS_LOG_DEBUG("ERRORWITHCOUNT")}}尽管我知道如何使用std::vector::count()方法进行计数,但这并没有奏效。但我想计算每个元素的数量,而不是计算所有元素……有什么想法吗? 最佳答案 最简单的方法是对vector​​进行std::

c++ - 为什么它说 'push_back' 尚未声明?

为什么它说“push_back”尚未声明?#include#includeusingnamespacestd;intmain(){vectorv(30);v[0].push_back(0);return0;} 最佳答案 v[0]是对vector中初始元素的引用;它不是vector本身。该元素的类型为int,它不是类类型对象,因此没有成员函数。你在找v.push_back(0);吗?请注意vectorv(30);创建vector其中有30个元素,每个元素的值为零。打电话v.push_back(0);将增加vector的大小到31.这可

c++ - 为什么 emplace_back() 会这样?

为什么在调用emplace_back()后立即调用~Base()为什么在析构函数调用后可以访问sayHello()为什么再次调用~Base()#include#includeclassBase{private:staticintm_count;public:Base(){std::coutvBase;vBase.emplace_back(Base());//程序输出...Basecreated.Count=1Basedestroyed.Count=0BasesayshelloBasedestroyed.Count=-1 最佳答案 在

c++ - push_back() 是否总是增加 vector 的大小?

我有一段代码创建了一个已知大小的std::vector:std::vectorvectorOfTs(n);是否调用push_back将大小增加到n+1?vectorOfTs.push_back(T()); 最佳答案 是的;注意vector.capacity()不同于vector.size().后者表示当前vector中的元素数,而前者表示适合当前分配给vector内部缓冲区的空间的项目数。 关于c++-push_back()是否总是增加vector的大小?,我们在StackOverflo

c++ - 使用 C++11 迭代语法时从 STL 列表中删除

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Erasinganelementfromacontainerwhileinsidearange-basedforloopSimilartothis,您可以在使用新的for(autoitem:list)语法从STL列表中删除它吗?这是一个完整的例子(崩溃了!)#includeusingnamespacestd;intmain(){listli;li.push_back(4);li.push_back(5);li.push_back(6);for(autonum:li){if(num==5)li.remove(n

c++ - boost::fusion::push_back 的正确用法是什么?

//...snippedincludesforiostreamandfusion...namespacefusion=boost::fusion;classBase{protected:intx;public:Base():x(0){}voidchug(){x++;coutvoidoperator()(T&t)const{t->chug();}};intmain(){typedeffusion::vectorStuff;Stuffstuff(newBase,newAlpha,newBravo,newBase);fusion::for_each(stuff,chug());//Mutat

c++ - 使用 C++(和 GSL)扩展和嵌入 Python(和 NumPy): pass gsl_matrix to python and back

我的问题“应该”很简单,但我仍然无法解决。我目前从事的项目需要一些繁重的计算(用C++完成)和一些模拟后数据分析(用Python完成)。但是,现在我正在更改主要算法,我将需要在C++和Python之间来回“循环”一些计算。也就是说,我需要在C++和Python之间来回移动一个double矩阵。在C++中,数据矩阵是一个“gsl_matrix”对象,而在Python中,相同的矩阵被实现为“numpy数组”。此刻,我正在运行我的C++代码,将矩阵保存到文件,从Python中读取它,将它写回文件,然后在C++中再次打开它以进行进一步计算。因为这是非常低效的,我想问问是否有人可以给我一个例子,

git中push和pull的区别是什么

git中push和pull的区别:1、“gitpush”命令是将本地库中的最新信息发送给远程库,用于将本地分支的更新,推送到远程主机;2、“gitpull”命令是从远程获取最新版本到本地库,用于从另一个存储库或本地分支获取并集成整合。gitpush与gitpull是一对推送/拉取分支的git命令。gitpush使用本地的对应分支来更新对应的远程分支#提交到远程(分支)gitpushorigin[本地分支名称]:[远程分支名称]注意:命令中的本地分支是指将要被推送到远端的分支,而远程分支是指推送的目标分支,即将本地分支合并到远程分支。如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的

c++ - C++17 和 emplace_back(...) 中的保证复制省略

emplace_back(...)是在C++11中引入的,以防止创建临时对象。现在使用C++17,纯左值甚至更纯,因此它们不会再导致临时对象的创建(更多信息请参见thisquestion)。现在我仍然不完全理解这些变化的后果,我们是否还需要emplace_back(...)还是我们可以回去使用push_back(...)又是? 最佳答案 push_back和emplace_back成员函数都在其value_typeT的某个位置创建了一个新对象预分配缓冲区。这是由vector的分配器完成的,默认情况下,它使用placementnew机