删除向量中的错误

阿索斯

我对使用int向量的向量感到困惑:删除整数后,它仍然存在!

#include "stdafx.h" 

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


int main(){
    //everything works fine with a vector of integer:
    std::vector<int> vi;
    vi.push_back(42);
    std::vector<int>::iterator intIter = std::find(vi.begin(), vi.end(), 42);
    if (intIter != vi.end())
        vi.erase(intIter);
    std::cout << "VI  content: ";
    for (auto l : vi)
        std::cout << l << " ";
    std::cout << "." << std::endl;

    //but not with a vector of vector of integer:
    std::vector< std::vector<int>> vvi; 
    std::vector<int> viTemp;
    viTemp.push_back(42);
    vvi.push_back(viTemp);
    for (auto viIter : vvi) {
        std::vector<int>::iterator intIter = std::find(viIter.begin(), viIter.end(), 42);
        if (intIter != viIter.end())
            viIter.erase(intIter);
    }
    std::cout << "VVI content: ";
    for (auto viIter2 : vvi) {
        for (auto intIter2 : viIter2)
            std::cout << intIter2 << " ";
        std::cout << ";";
    }
    std::cout << "." << std::endl;
}

运行后,结果显示:

VI  content: .
VVI content: 42 ;.

因此,整数向量vi删除了内容;但是,整数向量的向量vvi仍然有42

我的错误在哪里?

让·弗朗索瓦·法布尔(Jean-Francois Fabre)

当您auto在循环中声明变量时,它会创建一个vector<int>变量,因此基本上是在删除向量副本上的值

 for (auto viIter : vvi) {

而是这样做:

for (auto &viIter : vvi) {

现在,auto变量是一个引用,您将要删除向量本身上的值,而不是副本上的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章