相关疑难解决方法(0)

使用索引擦除stl :: vector中的元素

我有一个stl::vector<int>,我需要删除给定索引处的所有元素(向量通常具有高维度).我想知道,考虑到原始矢量的顺序应该保留,这是进行这种操作的最有效方法.

虽然,我在这个问题上发现了相关的帖子,但有些人需要删除一个单元素多个元素,其中删除 - 删除成语似乎是一个很好的解决方案.但是,在我的情况下,我需要删除多个元素,因为我使用的是索引而不是直接值,remove-erase idiom所以无法应用,对吧?我的代码如下所示,我想知道在效率方面是否可以做得更好?

bool find_element(const vector<int> & vMyVect, int nElem){
    return (std::find(vMyVect.begin(), vMyVect.end(), nElem)!=vMyVect.end()) ? true : false;
}

void remove_elements(){

    srand ( time(NULL) );

    int nSize = 20;
    std::vector<int> vMyValues;
    for(int i = 0; i < nSize; ++i){
            vMyValues.push_back(i);
    }

    int nRandIdx;
    std::vector<int> vMyIndexes;
    for(int i = 0; i < 6; ++i){
        nRandIdx = rand() % nSize;
        vMyIndexes.push_back(nRandIdx);
    }

    std::vector<int> vMyResult;
    for(int i=0; i < (int)vMyValues.size(); i++){ …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm stl vector

18
推荐指数
3
解决办法
7132
查看次数

使用remove_if从C++向量中删除索引

我们可以在C++中使用remove_if来基于对元素进行操作的谓词在线性时间中从向量中移除元素.

bool condition(double d) {...}

vector<double> data = ...
std::remove_if (data.begin(), data.end(), condition);
Run Code Online (Sandbox Code Playgroud)

如果我的条件不依赖于价值,而是依赖指数怎么办?换句话说,如果我想删除所有奇数索引元素,或某些任意索引集等?

bool condition(int index) {//returns whether this index should be removed}

vector<double> data = ...
std::remove_if (data.begin(), data.end(), ???);
Run Code Online (Sandbox Code Playgroud)

c++ indexing iterator vector remove-if

8
推荐指数
2
解决办法
3768
查看次数

remove_if基于矢量索引和仿函数

这个问题展示了如何使用函数谓词基于向量索引使用erase/remove_if.这在第一次调用函数时效果很好但是因为局部静态变量维持状态,在下次调用另一个向量时我会运气不好.所以我认为我可以使用一个带有可重用的私有变量的仿函数.除了第一个元素外,它主要起作用.remove_if使用仿函数混淆私有变量的初始化的方式是特定的

#include <vector> 
#include <algorithm>
#include <iostream>
#include <iterator>

using namespace std;

class is_IndexEven_Functor {
public:
  is_IndexEven_Functor() : k(0) {}

  bool operator()(const int &i) {
    cout << "DEBUG: isIndexEvenFunctor: k " << k << "\ti " << i << endl; ////

    if(k++ % 2 == 0) {
      return true;
    } else {
      return false;
    }
  }
private:
  int k;
};

int main() {

  is_IndexEven_Functor a;
  a(0);
  a(1);
  a(2);
  a(3);

  vector<int> v;
  v.push_back(0);
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);

  cout << "\nBefore\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector remove-if

3
推荐指数
1
解决办法
675
查看次数

标签 统计

c++ ×3

vector ×3

remove-if ×2

stl ×2

algorithm ×1

indexing ×1

iterator ×1