相关疑难解决方法(0)

C++按值而不是按位置擦除向量元素?

vector<int> myVector;
Run Code Online (Sandbox Code Playgroud)

并且让我们说向量中的值是这个(按此顺序):

5 9 2 8 0 7
Run Code Online (Sandbox Code Playgroud)

如果我想删除包含值"8"的元素,我想我会这样做:

myVector.erase(myVector.begin()+4);
Run Code Online (Sandbox Code Playgroud)

因为那会抹掉第4个元素.但有没有办法根据值"8"擦除元素?喜欢:

myVector.eraseElementWhoseValueIs(8);
Run Code Online (Sandbox Code Playgroud)

或者我只是需要遍历所有的向量元素并测试它们的值?

c++ stl vector erase erase-remove-idiom

235
推荐指数
3
解决办法
29万
查看次数

从值中删除向量中的元素 - C++

如果我有

vector<T> list
Run Code Online (Sandbox Code Playgroud)

如果列表中的每个元素都是唯一的,那么删除元素的最简单方法是什么,只要我不知道它是否在列表中?我不知道元素的索引,我不在乎它是否在列表中.

c++ vector

14
推荐指数
1
解决办法
4万
查看次数

算法删除两组交集中的元素

我有一个Visual Studio 2008 C++ 03应用程序,我有两个标准容器.我想从一个容器中删除另一个容器中存在的所有项目(集合的交集).

这样的事情:

std::vector< int > items = /* 1, 2, 3, 4, 5, 6, 7 */;
std::set< int > items_to_remove = /* 2, 4, 5*/;

std::some_algorithm( items.begin, items.end(), items_to_remove.begin(), items_to_remove.end() );

assert( items == /* 1, 3, 6, 7 */ )
Run Code Online (Sandbox Code Playgroud)

是否存在可以执行此操作的现有算法或模式,还是需要自行编写?

谢谢

c++ algorithm

5
推荐指数
1
解决办法
2459
查看次数

std::vector::erase 的时间复杂度

我找到了一种从 STL 向量中删除元素及其值的方法:

vec.erase(remove(vec.begin(), vec.end(), value), vec.end());
Run Code Online (Sandbox Code Playgroud)

现在我想知道这个方法的效率如何,即它的时间复杂度(以 Big O 表示法)。

c++ vector time-complexity

4
推荐指数
1
解决办法
1万
查看次数

为什么我的矢量在擦除项目后无法正确调整大小?

我编写了一个小程序来从向量中删除 0。但是当我检查时,向量中仍然有一个零。为什么?

大小表示它应该是 3 时是 4,但仍然显示为零。

int main()
{

    vector<int> nums1 = {1, 2, 3, 0, 0, 0};

    for(int i=0; i< nums1.size(); i++)
    {
        if(nums1[i] == 0)
            nums1.erase(nums1.begin() + i);
    }
    cout << "size is now: " << nums1.size() << endl;

    for(int j=0; j<nums1.size(); j++)
        cout<< nums1[j] << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ vector erase

1
推荐指数
2
解决办法
92
查看次数

返回向量中索引处的元素

如何删除向量中指定索引处的元素,然后返回该元素?有没有办法呢?

c++

0
推荐指数
1
解决办法
389
查看次数