草庐IT

vector-class-library

全部标签

c++ - 智能指针 : cast between base and derived classes

假设你有这样一个函数:SmartPtrdoSomething(SmartPtra);像这样的类:classA{}classB:publicA{}现在我这样做:SmartPtrfoo=newB();doSomething(foo);现在,我想取回一个SmartPtr来自doSomething的对象.SmartPtrb=doSomething(foo);这可能吗?我需要做什么样的选角?现在,我刚发现一些我认为丑陋的东西:B*b=(B*)doSomething().get()重要说明:我无权访问SmartPtr和doSomething()代码。 最佳答案

c++ - 为什么使用一个 vs 另一个 : `boost::shared_array` VS `boost::shared_ptr<std::vector>` ?

因此,要处理用于图像或类似内容的大内存块,显然有很多选择。因为我是智能指针和RAII的粉丝,所以我想知道它是否更智能:一个shared_ptr到一个std::vector或使用指向动态分配数组的shared_array。选择一个与另一个相比,在概念、实践和性能方面的影响是什么? 最佳答案 这与比较std::vector与C数组相同。将shared_array视为RAIIC数组。你得到的只是自动内存释放。在处理返回数组的第3方代码时很有用。理论上它在某些边缘情况下比std::vector更快,但灵active和安全性要差得多。std:

c++ - boost 序列化: Linking to libraries

我想使用Boost库在我的程序中序列化对象。这是我第一次使用它,它给我带来了一些问题。在我的程序中,我实现了“序列化”方法并包括以下内容:#include#include#include现在,当我构建时,出现以下错误:Undefinedsymbolsforarchitecturex86_64:"boost::archive::text_oarchive_impl::text_oarchive_impl(std::basic_ostream>&,unsignedint)",referencedfrom:boost::archive::text_oarchive::text_oarchiv

c++ - 在用户插入数据之前创建结构对象时,Vector 返回乱码

我在练习使用指针时偶然发现了一些我不理解的东西。该程序执行以下操作:创建一个vector将vector的地址传递给函数那个函数有一个for循环在该for循环中,要求用户提供电影名称收到电影名称后,将创建一个新的电影对象(来自结构)为每部电影创建一个新的boost线程,传递用户制作的标题以及新电影对象和vector的指针。在boost线程中,电影对象的“title”变量被赋予用户制作的标题,然后电影被添加到vector中当所有线程都完成后,“main”函数内的for循环会显示vector中存储的所有电影标题。当我交换这两个时出现问题//Getinfoaboutnewmoviefromus

c++ - cl::vector 与 std::vector:不同的迭代器行为

编辑:按照PlasmaHH的建议添加了带有内存位置的调试输出。我不明白cl::vector在OpenCL的C++绑定(bind)中的不同行为。考虑以下代码:标题Top.hpp:classTop{public:voidsetBool(boolb);boolgetBool();private:boolstatus;};来源Top.cpp:#include"Top.hpp"voidTop::setBool(boolb){std::cout使用上面的:#define__NO_STD_VECTOR#include#include"CL/cl.hpp"#include"Top.hpp"usingn

c++ - 控制 std::vector 重新分配

通过阅读std::vector引用,我明白了在达到最大容量时调用insert将导致std::vector重新分配(导致迭代器失效),因为新内存分配给它具有更大的容量。目标是保证连续数据。只要我坚持低于最大容量,insert就不会导致这种情况(并且迭代器将完好无损)。我的问题如下:当insert自动调用reserve时,有什么办法可以控制必须保留多少新内存?假设我有一个初始容量为100的vector,当达到最大容量时,我想额外分配20个字节。这有可能吗? 最佳答案 你总是可以自己跟踪它并在它分配之前调用reserve,例如static

c++ - 将 vector<shared_ptr<Derived>> 传递给需要 vector<shared_ptr<Base>> 的函数

我使用的代码结构有问题,如下(简化):classSPoint{public:SPoint(doublex,doubley,doublez):_x(x),_y(y),_z(z){}protected:double_x,_y,_z;}classPoint3D:publicSPoint{public:Point3D(doublex,doubley,doublez):SPoint(x,y,z){//defaultvaluesforUandV}protected:doubleU,V;}这些点用于创建折线:classSPolyline{public:SPolyline(constvector>&p

c++ - 排序和连接百万或十亿 STL vector 的最快方法

将数百万或数十亿个STLvector排序并串联成单个STLvector的最佳方法是什么。目前,我的做法是迭代vector并执行每个操作。这是伪代码typedefunsignedlonglongintULLInt;ULLIntN=1000000;vector>vecVec(N,vector());vectorconcatVec;//...//...fillvectorsinsidevecVechere//..wealsogetherethetotalnumberofvaluesinsertedinallvectors(count)//...//reservethespaceconcatV

c++ - vector 无效分配大小

当我尝试创建并调整一个vector以容纳最大数量的项目时(vector::max_size()),我在运行时遇到调试错误:"Invalidallocationsize:429467292"我想知道为什么你不能调整它的大小,如果max_size()应该返回vector中项目的最大数量......vectorvc;vc.resize(vc.max_size());我还尝试在VS2010中启用LARGADRESSAWARE:On,但这没有帮助。想知道这是否是正确的thoguth...有人知道吗? 最佳答案 max_size()是vecto

C++ 在 boost::mpl::vector 中为每个类加好友

如何在boost::mpl::vector中的每个类(class)都有一个类(class)friend?即,扩展为:templateclassA{friendclassmpl_vector[0];friendclassmpl_vector[1];...friendclassmpl_vector[n];}; 最佳答案 按照Andres的建议,使用boost预处理器进行处理。我试过了,不是很好,编译效率会很低。它也仅限于达到BOOST_MPL_LIMIT_VECTOR_SIZE。如果他的方法有效,那么它可能会更干净一些。A类.h:#if