我对使用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
!
我的错误在哪里?
当您auto
在循环中声明变量时,它会创建一个vector<int>
变量,因此基本上是在删除向量副本上的值
for (auto viIter : vvi) {
而是这样做:
for (auto &viIter : vvi) {
现在,auto变量是一个引用,您将要删除向量本身上的值,而不是副本上的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句