草庐IT

vector_c

全部标签

c++ - std::deque 在末尾插入是否比 std::vector 快?

我开始比较:插入列表的前面插入vector的后面插入双端队列的前端但后来我注意到,即使在push_back()上,双端队列似乎也更快。我一定是做错了某事,我无法相信更通用的容器会优于特定的容器。我的代码使用谷歌基准测试:#include"benchmark/benchmark.h"#include#include#defineNUM_INS1000staticvoidBM_InsertVector(benchmark::State&state){std::vectorv;v.reserve(NUM_INS);while(state.KeepRunning()){state.PauseT

c++ - vector 和列表的 end() 迭代器的语义

根据C++标准,如果vector的新大小超过其容量,则对vector调用push_back()会使迭代器失效,但在列表上它永远不会使迭代器失效。现在考虑以下代码片段:1.vectorv{1,2,3};v.reserve(100);for(inti:v){v.push_back(i);}2.listl{1,2,3};for(inti:l){l.push_back(i);}我用gcc4.8试了一下,发现代码1以v结束时为{1,2,3,1,2,3},但代码2运行进入无限循环。对我来说,解释似乎很简单:vector的end()迭代器指向一个内存位置,并且由于itisonlyevaluatedo

C++如何将排序的 vector 合并到排序的 vector 中/从所有 vector 中弹出最少的元素?

我有大约一百个排序的集合vector的尽管大多数vector中包含少量整数,但某些vector包含大量(>10K)整数(因此vector不一定具有相同的大小)。我想做的基本上是遍历所有这些已排序vector中包含的从最小到最大的整数。一种方法是将所有这些排序的vector合并到一个排序的vector中并简单地迭代。因此,问题1:将已排序vector合并为已排序vector的最快方法是什么?我敢肯定,另一方面,有更快/更聪明的方法可以在不合并和重新排序整个事物的情况下完成此操作——也许从这个已排序vector集合中迭代地弹出最小整数;没有先合并它们..所以:问题2:从一堆已排序的vect

c++ - 删除指针 vector

我需要创建类实例的指针,而程序在编译时并不知道我将创建多少个指针。对于删除,我考虑的是将指针存储在一个vector中,然后一个一个的删除。使用智能指针会是一种更清洁的方法吗?如果不想使用智能指针,那么这种vector的使用是否被认为是干净的?最小代码:#includeusingnamespacestd;classFoo{public:Foo();};Foo::Foo(){}voidcreateFooVector(intnb,std::vector&v){for(inti=0;iv;createFooVector(5,v);while(!v.empty()){Foo*f=v.back()

c++ - 从指针 vector 到 const 指针 vector 的重新解释是否安全?

这种转换类型安全吗vectora;constvector&b=reinterpret_cast&>(a);静态转换显然在这种情况下不起作用,因为模板参数正在改变。但是通过重新解释转换,我只是将常量添加到本质上相同的类型。那么对于所有实际用途来说这应该是安全的吗? 最佳答案 就像使用reinterpret_cast将引用转换为不相关的类型一样,它会产生未定义的行为,因此是不安全的,除非您将“安全”定义为“在我的编译器上工作”。 关于c++-从指针vector到const指针vector的重

c++ - 有没有办法在使用 C++11 调用函数期间将 `vector<int>` 自动提升为 `vector<double>`?

如果我定义一个接受double的函数,我通常可以用int来调用它并获得正确的行为。doublesquare(doubled){returnd*d;}square(1);//validcall但是,如果我有一个接受vector的函数,用vector调用它是无效的doublesum(constvector&d){doubles=0;for(inti=0;if(1,5);sum(f);//Compilererror一个解决方案是使用模板:templatedoubletsum(constvector&d){doubles=0;for(inti=0;if(1,5);tsum(f);//Valid

c++ - vector::emplace_back 与 shared_ptr 的用法

#include#include#includeusingnamespacestd;structBinaryTree{intelement;shared_ptrleft;shared_ptrright;};intmain(){vector>vecBT;//caseIvecBT.emplace_back(newBinaryTree{10,nullptr,nullptr});//caseIIvecBT.emplace_back(shared_ptr(newBinaryTree{20,nullptr,nullptr}));return0;}http://en.cppreference.com

c++ - 如何在 Eigen 中连接 vector ?

我的程序中有两个vectorXd,我喜欢将它们连接成一个vector,这样第二个的值就在第一个之后,我发现它适用于矩阵,但它似乎不适用于vector:Eigenhowtoconcatenatematrixalongaspecificdimension? 最佳答案 像这样,假设你已经有了vec1和vec2:VectorXdvec_joined(vec1.size()+vec2.size());vec_joined(请注意,vector类型只是矩阵类型的类型定义,仅限于只有一列。)进一步阅读:Advancedinitialization

c++ - vector.emplace_back() 和 vector.push_back() 做同样的事情吗?

所以我试图将整数添加到我的vector的背面,并错误地认为push_back()将新数据添加到vector的前面(又名vector[0])。我在Xcode中做了一个测试,并针对emplace_back()测试了push_back()并得到了相同的结果。我以为他们是不同的,但这让我觉得也许他们做同样的事情。如果是这样,为什么vector有不同的方法?这是我的代码,以防我这样做:#include#includeusingnamespacestd;intmain(intargc,constchar*argv[]){//forpush_backvectorpush;push.push_back

c++ - 如何有效地将二进制文件读入 vector C++

我需要将一个大的二进制文件(~1GB)读入std::vector.我目前正在使用infile.read将整个内容复制到char*缓冲区(如下所示),我目前计划将整个东西转换成doubles与reinterpret_cast.肯定有办法把doubles直接进入vector?我也不确定二进制文件的格式,数据是用python生成的,所以它可能都是floatifstreaminfile(filename,std--ifstream--binary);infile.seekg(0,infile.end);//NisthetotalnumberofdoublesN=infile.tellg();i