C++ 如何迭代向量?

C++ 如何迭代向量?,c++,for-loop,foreach,iteration,cycle,C++,For Loop,Foreach,Iteration,Cycle,这是: 当我的期望是: inside val: 1 | index: 0 ### REMOVED ### inside val: 2 | index: 1 inside val: 3 | index: 2 inside val: 4 | index: 3 ### REMOVED ### inside val: 5 | index: 4 它在操纵自身时会弄乱索引/数组的大小,因为它会更改内存指针和目标的大小 我的习惯是使用foreach语句,即使在迭代过程中删除/添加元素,下一个始终是开始列表

这是:

当我的期望是:

inside val: 1 | index: 0
### REMOVED ###
inside val: 2 | index: 1
inside val: 3 | index: 2
inside val: 4 | index: 3
### REMOVED ### 
inside val: 5 | index: 4
它在操纵自身时会弄乱索引/数组的大小,因为它会更改内存指针和目标的大小

我的习惯是使用foreach语句,即使在迭代过程中删除/添加元素,下一个始终是开始列表中的下一个

你如何用C++来做?

< P>可以删除元素的for循环的规范形式如下:

for(auto i = begin(coll); i != end(coll);) {

    // ...

    if(hasToRemove)
        i = coll.erase(i);
    else
        ++i;
}
使用迭代器:

int ind = 0;
for (auto i = array.begin(); i != array.end(); ) {
    if(*i==2 || *i==5) {
        i = array.erase(i);
        printf("### REMOVED ###\n");
    } 
    else {
    ++i;
    ++ind;
    }

    printf("inside val: %d | index: %d\n", *i, ind);
}

只需像这样更改代码

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

    printf("inside val: %d | index: %d\n", array[temp], temp);
}

你有C语言的例子吗?@TAS:当然:尽管你的问题很清楚,可以回答,但你没有在你的C代码段中执行任何删除操作?我无法运行它:@markzzz,因为我现在是一个迭代器。您必须取消引用它*i才能访问它引用的值,并且您可以使用i-begincoll将索引检索到向量中?我无法计算出我想要的结果。我所做的是:在val:4内移除结果不同|索引:2在val:5内移除索引:3在val:5内移除|索引:4在val:0内移除|索引:5在val:0内移除索引:5
int ind = 0;
for (auto i = array.begin(); i != array.end(); ) {
    if(*i==2 || *i==5) {
        i = array.erase(i);
        printf("### REMOVED ###\n");
    } 
    else {
    ++i;
    ++ind;
    }

    printf("inside val: %d | index: %d\n", *i, ind);
}
for (int i = 0; i < array.size(); i++) {
    int temp=i;
    if(array[temp]==2 || array[temp]==5) {
        array.erase(array.begin() + temp);
        printf("### REMOVED ###\n", array[temp], temp);
        i--;
    } 

    printf("inside val: %d | index: %d\n", array[temp], temp);
}