草庐IT

vector_c

全部标签

c++ - std::vector 和 std::string 重新分配策略

在GCC的实现中,std::string和std::vector的重新分配策略是什么?我对所采用的具体策略感兴趣:当我将项目附加到vector(或将字符附加到字符串)时,它可能会超过保留大小,然后会发生重新分配,但作为函数的新大小是多少旧的?在删除元素的情况下,实际重新分配和释放内存的阈值是多少(新大小又是多少)?其他编译器的答案也将不胜感激。 最佳答案 查看bits/STL_vector.h中的函数_M_check_len。它包含:constsize_type__len=size()+std::max(size(),__n);因此

c++ - 如何在 std::vector 中生成对象而不复制?

有一个学生类classStudent{public:inlinestaticintcurrent_id_max=0;intid=0;stringname;public:Student(){id=(++current_id_max);cout我想用参数将5个学生创建成一个vector,std::vectorschool={Student("Tom"),Student("Mike"),Student("Zhang"),Student("Wang"),Student("Li")};会有5个Studentconstructor:name和5个Studentconstructorcopy:nam

c++ - 我可以在不查看每个元素的情况下将 std::vector<Animal*> 转换为 std::vector<Dog*> 吗?

我有一个基类,有几个扩展它的类。我有一些通用库实用程序,它们创建一个包含指向基类的指针的vector,以便任何子类都可以工作。如何将vector的所有元素都转换为特定的子类?//Amethodiscalledthatassumesthatavectorcontaining//DogscastedtoAnimalispassed.voidmyDogCallback(vector&animals){//Iwanttocastalloftheelementsofanimalsto//bedogs.vectordogs=castAsDogs(animals);}我天真的解决方案看起来像这样:/

c# - 是否有与 C# 的 Vector3 等效的标准 C++?

只是想知道C++是否具有与C#中的Vector2/3/4(我认为是结构?)等价的标准?编辑:为了澄清,XNAC#Vector2/3/4“结构”(我不完全确定它们是什么)基本上包含2、3或4个浮点值,就像C++中定义的结构一样:structVector3{floatx,y,z;};我基本上一直只使用C++中的代码,但我希望有一个标准的替代方案,但找不到。 最佳答案 Vector3struct在C#中来自XNA,而不是基类库。C++中的等价物是使用XMFLOAT3. 关于c#-是否有与C#的

c++ - 在 STL vector 中管理作用域和对象生命周期

来自C#世界,我正在努力确保我不会在分配给我的C++项目中引入内存泄漏和错误。我正在编写使用结构从数据缓冲区解析信息的代码。由于缓冲区中出现的数据结构的数量在运行时可能会发生变化,因此使用STLvector来存储处理后的数据。我在现有软件中遇到了以下代码块,并且正在努力理解其工作原理:MyVectorOfObjects.clear();for(unsigned__int8i=0;i我的问题具体是:根据thisquestion,难道parserObject不会在每次迭代时超出范围,因为没有使用new关键字吗?显然这段代码一直有效。在这种情况下,将对象放在vector中是否会使parser

c++ - C++ 中的稀疏 vector ?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion我有一些代码,使用类vector,我想用一个实现稀疏vector的vector来实现(即,不是记录vector长度数组中的元素,包括0,它只包括非查找表中的零表)。C++中是否有任何稀疏vector类使用与vector相同的接口(int

c++ - vector 索引访问与迭代器访问的效率

我有问题要纠正我对使用索引访问(使用运算符[])或使用迭代器访问vector元素的效率的理解。我的理解是“迭代器”比“索引访问”更有效率。(我还认为vector::end()比vector::size()更有效)。现在我写了示例代码来测量它(在Windows7下使用Cygwin,使用g++4.5.3)索引访问循环版本(以前标记为随机访问):intmain(){std::vectorvec(10000000);size_tvalue=0;for(size_tx=0;x迭代器循环代码是这样的:for(std::vector::iteratoriter=vec.begin();iter!=v

c++ - 在调用 vector::assign() 之前调用 vector::reserve() 会更好吗?

我知道使用“reserve”以避免不必要的重新分配是一种很好的做法(EffectiveSTL的第14项):std::vectorv1;v1.reserve(1000);for(inti=0;i当您调用assign时是否适用相同的规则?std::vectorv2;//v2.reserve(v1.size());//Bettertodothis?v2.assign(v1.begin(),v1.end()); 最佳答案 如果v1是std::vector你真的不需要它,因为编译器/STL知道在v2(并且将在复制实际数据之前保留本身所需的数量

c++ - c std::vector 一分为二

是否有一种简单且运行时高效的方法可以在C++中采用std::vector并将其分成两半分成另外两个vector?因为现在我正在这样做:std::vectorv1,v2;for(inti=0;i它在O(n)时间内运行,这是我必须经常执行的操作。那么有没有更好的办法呢? 最佳答案 如果你真的需要2个vector,并且你不能在评论中使用GMan的建议://wherev1isyouroriginalvectorstd::vectorv2(std::make_move_iterator(v1.begin()+v1.size()/2),std:

c++ - 如何 "concatenate"boost::mpl::vectors

我有不同的载体mpl::vectormpl::vector我想“连接”它们以形成:mpl::vector这将允许我准备vector模板并在之后重复使用它们。我的问题有不同的解决方案,但这种方法似乎最适合我。谢谢... 最佳答案 libaray原生支持的函数boost::mpl::joint_view可能是更好的选择。它经过优化和惰性评估。http://www.boost.org/doc/libs/1_55_0/libs/mpl/doc/refmanual/joint-view.html