相关疑难解决方法(0)

从矢量中删除元素

我想使用erase方法从向量中清除元素.但是这里的问题是元素不能保证在向量中只出现一次.它可能存在多次,我需要清除所有这些.我的代码是这样的:

void erase(std::vector<int>& myNumbers_in, int number_in)
{
    std::vector<int>::iterator iter = myNumbers_in.begin();
    std::vector<int>::iterator endIter = myNumbers_in.end();
    for(; iter != endIter; ++iter)
    {
        if(*iter == number_in)
        {
            myNumbers_in.erase(iter);
        }
    }
}

int main(int argc, char* argv[])
{
    std::vector<int> myNmbers;
    for(int i = 0; i < 2; ++i)
    {
        myNmbers.push_back(i);
        myNmbers.push_back(i);
    }

    erase(myNmbers, 1);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码显然崩溃了,因为我在迭代它时改变了向量的末尾.实现这一目标的最佳方法是什么?也就是说有没有办法做到这一点,而无需多次迭代矢量或创建一个矢量的副本?

c++ stl vector erase

94
推荐指数
3
解决办法
13万
查看次数

如何缩小std :: vector的大小?

std::vector当我不再需要以前预留的空间时,有没有办法调整容量以降低容量?

c++ stl vector

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

C++ 98中的std :: remove_if用法

我正在寻找一种在迭代时擦除矢量中某些元素的智能方法,并找到了这个问题.

当然,它对我不起作用,因为C++ 98没有lambdas.寻找remove_if信息,并在cppreferenc e 找到了这个.这就是我的代码的样子:

#include <algorithm>
#include <vector>

bool isOutageValid(const Outage& outage){
    return outage.getEndTime() >= 0;
}

std::vector<Outage> outages;
// Some stuff to fill the vector

outages.erase(std::remove_if(outages.begin(), outages.end(), isOutageValid));

for(vector<Outage>::iterator o=outages.begin(); o!=outages.end(); o++){
    std::cout << o->getStartTime() << " " << o->getEndTime() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我正在调试4个中断到一个向量,我知道第一个是无效的,其余的有效.执行擦除后,矢量大小为3,因此看起来没问题.但是如果我用for循环迭代来检查向量中的3次中断,则第二次被删除而不是第一次.

我甚至调试了isOutageValid方法,它是第一个唯一返回false的方法.我有什么错误吗?

c++ vector c++98

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

你会如何迭代矢量?

这是我的代码:

std::vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
array.push_back(4);
array.push_back(5);

for (int i = 0; i < array.size(); i++) {
    if(array[i]==2 || array[i]==5) {
        array.erase(array.begin() + i);
        printf("### REMOVED ###\n", array[i], i);
    } 

    printf("inside val: %d | index: %d\n", array[i], i);
}
Run Code Online (Sandbox Code Playgroud)

但正如你所看到的,它输出:

inside val: 1 | index: 0
### REMOVED ###
inside val: 3 | index: 1
inside val: 4 | index: 2
### REMOVED ###
inside val: 5 | index: 3
Run Code Online (Sandbox Code Playgroud)

当我的"期望"是:

inside val: 1 | index: 0 …
Run Code Online (Sandbox Code Playgroud)

c++ iteration foreach for-loop cycle

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

标签 统计

c++ ×4

vector ×3

stl ×2

c++98 ×1

cycle ×1

erase ×1

for-loop ×1

foreach ×1

iteration ×1