草庐IT

vector_tostr

全部标签

c++ - 使用 remove_if 按索引从 C++ vector 中删除

我们可以在C++中使用remove_if,根据对元素进行操作的谓词,在线性时间内从vector中删除元素。boolcondition(doubled){...}vectordata=...std::remove_if(data.begin(),data.end(),condition);如果我的条件不取决于值,而是取决于指数怎么办?换句话说,如果我想删除所有奇数索引元素,或一些任意索引集等?boolcondition(intindex){//returnswhetherthisindexshouldberemoved}vectordata=...std::remove_if(data.

c++ - 线程安全 vector

首先让我说,我已经阅读了关于该主题的大部分SO和其他主题。我理解的方式是,std::vector将在推回新项目时重新分配内存,这是我的情况,除非我预留了足够的空间(这是不是我的情况)。我拥有的是一个std::shared_ptrvector,该vector包含唯一对象(或者更准确地说,是指向vector中唯一对象的指针)。通过指针对这些对象的处理被包装在工厂和处理程序类中,但是指向对象的指针可以从包装类外部访问,并且可以修改成员值。任何时候都不会发生删除。如果我正确理解了之前关于std::vector和线程安全的SO问题中提出的问题,添加(push_back)新对象可能会使之前的指针无

c++ - 对一对 vector 进行排序

我知道如何对vector对进行排序,但是如何对vector对进行排序?我可以考虑在一对vector上编写一个自定义的“虚拟”迭代器并对其进行排序,但这看起来很复杂。有没有更简单的方法?C++03中有吗?我想使用std::sort.当处理一些在硬件中生成的数据时会出现这个问题,其中一对数组比成对的数组更有意义(从那时起就会有各种步幅和对齐问题)。我意识到,否则保留一对vector而不是一对vector将是一个设计缺陷(数组结构问题)。我正在寻找一种快速的解决方案,将数据复制到成对的vector然后再复制回来(我会将其返回给HW以进行更多处理)不是一种选择。例子:keys={5,2,3,1

c++ - 为什么 vector<int> 在以下情况下比 vector<bool> 快

这个现象是我在LeetCode题目N-Queens编程时发现的.我有两个版本的可接受代码,唯一的区别是我存储哈希表的方式,一个是使用vector另一个正在使用vector.具体来说,两个版本的代码如下:版本1,vector,运行时间:4毫秒classSolution{public:voiddfs(vector&crtrst,vector>&finalrsts,introw,vector&mup,vector&m45dgr,vector&m135dgr){intn=crtrst.size();if(row==n){finalrsts.push_back(crtrst);return;}f

c++ - 为什么 std::find for vector 返回一个迭代器而不是整数位置

为什么vector查找返回的是迭代器而不是整数值?vector::iteratoritr1=std::find(words.begin(),words.end(),word); 最佳答案 std::find适用于各种容器,而不仅仅是std::vector。例如,它适用于std::list但该容器不允许通过索引访问元素(至少不容易)。为了让它与所有类型的容器一起工作,它需要返回所有容器都能理解的东西,一个迭代器。编辑:如果你想找到相当于给定迭代器的索引位置,你可以使用std::distance.例如:std::distance(std

c++ - 如何在 C++ 中获取两个 vector 共有的字符?

我正在尝试比较两个vector对象,并返回一个vector,其中包含出现在两个vector中的所有字符。如果不编写一些非常复杂的手动方法,我将如何解决这个问题,该方法将第一个vector中的每个字符与第二个vector中的每个字符进行比较,并使用if将其添加到第三个vector(如果它们将被返回)匹配。也许我缺乏对vector的实际经验让我想象这会比实际情况更难,但我怀疑有一些我无法通过搜索找到的更简单的方法。 最佳答案 我认为您正在寻找std::set_intersection.但是必须对源vector进行排序。如果您不关心输出v

c++ - STL:为 vector 写入 "where"运算符

我需要根据几个bool谓词在vector中找到索引。例如:vectorv;vectoridx;idx=where(bool_func1(v),bool_func2(v),...);声明**where**函数的方式是什么,以便在vector上使用几个用户定义的bool函数?谢谢阿曼。一周后编辑我用模板做了一些复杂的解决方案。但实际上,我可以使用已经预定义的valarray来完成我的任务。这是代码片段,也许有人会发现它有用:doubledr=Rc/(double)Nbins,r;sigma.resize(Nbins);rr=sigma;valarrayvz(&data.vz[0],data

c++ - 向抽象类的 std::vector 添加元素

我想将从公共(public)接口(interface)(抽象类)派生的类的对象存储在该抽象类的std::vector中。这个vector应该在一个循环中填充,通常我会调用一个类的构造函数并将创建的对象推送到vector中。据我所知,在抽象类的情况下,我只能存储指向该类的指针,因此我需要push_back派生类的指针。但是,我不确定这些新创建的对象的范围。请看下面的代码。这段代码可以编译并运行良好,但我的问题是:a)对象是否保证存在于主函数的第二个for循环中?或者它们可能会在创建它们的循环范围之外停止存在?b)是否调用了所有对象的析构函数或可能存在内存泄漏?#include#inclu

python - 在 C++ 中切片 vector

在C++中是否有等价于列表切片[1:]的vector?我只想从vector中获取除第一个元素以外的所有元素。Python的列表切片操作符:list1=[1,2,3]list2=list1[1:]print(list2)#[2,3]C++期望的结果:std::vectorv1={1,2,3};std::vectorv2;v2=v1[1:];std::cout 最佳答案 这可以使用std::vector的复制构造函数轻松完成:v2=std::vector(v1.begin()+1,v1.end());

c++ - 如何按特定的预定顺序对字符串 vector 进行排序?

问题:我需要按照确切的特定顺序对字符串vector进行排序。假设我们有一个常量vector或一个具有确切顺序的数组:vectorcorrectOrder={"Item3","Item1","Item5","Item4","Item2"};接下来,我们有一个动态传入vector,它将具有相同的项目,但它们可能混合在一起并且数量较少。vectorincommingVector={"Item1","Item5","Item3"};所以我需要按照第一个vectorcorrectOrder的顺序对incommingvector进行排序,结果必须是:vectorsortedVector={"Ite