草庐IT

Vector2D

全部标签

c++ - std::vector 推速?

我正在使用vector来管理我的大型结构数据。但是突然间,当发现vector源代码时,我很惊讶地看到下面的一些代码:inlinevoidpush_back(const_Ty&_X){insert(end(),_X);}//...voidinsert(iterator_P,size_type_M,const_Ty&_X){//////////////////////////////////////////////////////////////iterator_S=allocator.allocate(_N,(void*)0);iterator_Q=_Ucopy(_First,_P,_S

在2D Python列表中替换字符串

我正在用文本文件作为行读取,然后按白空间将这些行分开,给我一个2D列表。嵌入式阵列中的某些字符串包含我试图使用的垃圾str.replace,但这不起作用。importosinfile='CMULEX.txt'data=[]withopen(infile,'r')asf:read_data=f.readlines()forrowinread_data[:5]:split_line=(row.split())data.append(split_line)forlineindata[:5]:forwdinline:wd=wd.replace('Coda','')看答案wd是局部变量。这不是回到列表的

C++ 如何在 shared_ptr vector 中存储多种类型?

如何在std::vector中存储多个shared_ptr,每个shared_ptr都带有指向不同类型的指针?std::vectorvec;vec.push_back(make_shared(3));vec.push_back(make_shared(3.14f));是否有一个基本的多态类,我可以将其用于该任务而无需使用特定于编译器的东西? 最佳答案 有几种方法可以做到这一点。我假设您想存储各种native类型,因为您正在使用int和float。如果您的类型列表是有限的,请使用boost::variant.例如std::vector

c++ - std::vector<Foo> 当 Foo 的一些成员是引用时

只要有可能,我通常更喜欢使用引用而不是指针,在我看来,它使语法更清晰。在这种情况下,我有一个类:classFoo{public:Foo(Bar&bar):bar_(bar){}private:Bar&bar_;};operator=()被编译器隐含地删除了这样一个类,因为一旦设置了引用,它就不能改变(我可以在技术上定义我自己的不改变bar_,但这不是必需的行为,所以我宁愿如果我尝试分配一个foo,编译器会提示)。我需要的是std::vectorv;.这在C++11之前是不可能的,因为模板参数必须是CopyAssignable。事实上,当我调用v.push_back(Foo(bar));

c++ - 从 vector 中移除项目,并对移除的项目进行变异

我有一个std::vector>我想从中erase-remove项目匹配一些谓词。移除的对象应该有一个方法调用,它设置一些状态以供在别处使用。当返回true时,是否有我不应该在谓词函数中执行此操作的原因?感觉有点像混合关注点,但我能想到的唯一替代方案似乎更丑陋。 最佳答案 这可能不是一个好主意的原因有两个。首先,大多数标准库算法不应该使用谓词来修改它们所作用的元素。其次,std::remove和std::remove_if没有为您提供一组好的“已删除”元素*。您只能依靠选择保留的元素。“删除”的元素实际上可能是“好”元素的拷贝。由于

c++ - 用户定义的不同大小 vector 的减少

我正在尝试为复杂的vector定义我自己的缩减,遵循thisanswer问题ReducingonarrayinOpenMP.但是我的vector的大小在编译时不是固定的,所以我不确定如何在declarereductionpragma中定义vector的初始值设定项。也就是说,我不能只拥有initializer(omp_priv=TComplexVector(10,0))但是vector需要初始化器。如何将运行时所需的vector大小传递给初始化子句?到目前为止,我所拥有的如下:typedefstd::vector>TCmplxVec;voidComplexAdd(TCmplxVec&x

c++ - std::vector 以外的排名保持数据结构?

我面临一个应用程序,我必须设计一个具有随机访问(或至少优于O(n))的容器,具有廉价的(O(1))插入和删除,并根据插入时指定的顺序(等级)。例如,如果我有以下数组:[2,9,10,3,4,6]我可以在索引2上调用remove来删除10,我还可以在索引1上调用insert通过插入13。在这两个操作之后我会:[2,13,9,3,4,6]数字存储在一个序列中,插入/删除操作需要一个索引参数来指定应该插入数字的位置或应该删除的数字。我的问题是,除了链表和vector之外,什么样的数据结构可以维护这样的东西?我倾向于优先考虑下一个可用索引的Heap。但我一直看到一些关于FusionTree有用

c++ - for_each 和 ranged base for on 2D array

我尝试使用for_each和基于范围的for循环打印二维数组。我的程序是这样的:-#include#includeusingnamespacestd;intmain(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};//for_each(begin(a),end(a),[](intx){cout为什么我的第一个for_each会抛出错误,为什么行需要&符号?它的类型是什么?row是指针吗? 最佳答案 for_each(begin(a),end(a),[](intx){coutbegin(a)产生一个int

c++ - std::vector::resize(size_type) 需要 CopyInsertable?

这个问题是在我回答thisanotherquestion的时候提出的.N333723.3.6.3“vector容量”说(在770页):voidresize(size_typesz);Effects:Ifsz,equivalenttoerase(begin()+sz,end());.Ifsize(),appendssz-size()value-initializedelementstothesequence.Requires:TshallbeCopyInsertableinto*this.然而,clang++saysit'sokaythoughTisnotcopyable.我认为resiz

c++ - 使用包含不完整类型的 `boost::variant` 递归定义和访问 `std::vector` - libstdc++ 与 libc++

我正在尝试定义和访问“递归”boost::variant使用incomplete包装类和std::vector作为我的间接技巧。我的实现适用于libstdc++,但不适用于libc++。这是我定义变体的方式:structmy_variant_wrapper;usingmy_variant_array=std::vector;//;structmy_variant_wrapper{my_variant_v;templatemy_variant_wrapper(Ts&&...xs):_v(std::forward(xs)...){}};我正在使用std::vector引入间接(以便动态分配