=myVec.end();itePre++) { myVec.erase(itePre); } printVec(myVec); 按我以前的理解,这样的循环删除方式预期的结果应该是会把vector中的数据清空,但是事实并非如此事实会导致程序崩溃因为itePre迭代器本身在被erase之后,是不可预测的,不应该再次被使用。为此我修改了代码如下: vector::iteratoritePre; ...
{if(1== *it) { it=vec.erase(it); }else{++it; } }
vector::erase 从指定容器删除指定的元素 两个重载: iterator erase (iterator position); 删除指定位置position的元素,并返回删除元素的下一个元素的迭代器 iterator erase (iterator first, iterator last); 删除从first到last(不包过last)之间的元素 [first,last),并返回last位置迭代器 错误用法1 #include<vector...
原因在于erase以后,itor已经指向下一个元素了,不应该在itor++,否则会跳过下一个元素,即连续两个6时跳过了第二个6. 另外,在itor2=itor时,两个itor是一样的,这样做并无意义。可修改如下: vector<int>::iterator itor;// vector<int>::iterator itor2;for(itor=array.begin();itor!=array.end();){...
1. erase(iterator position):删除位置为position的元素。 2. erase(iterator first, iterator last):删除区间[first,last)中的所有元素。 其中,iterator是指向vector中元素的迭代器,指定了要删除的元素位置或区间。 使用erase函数时需要注意以下几点: 1.在使用erase函数删除元素后,其他元素的位置会向前移动,因此迭代...
这是因为使用 erase 删除元素之后,迭代器it 已经指向了被删除元素的下一个元素。所以当删除第一个 3 后,it 实际指向了下一个元素 3(或者说元素 3 向前移了一个单位),因此再经历 it++ 后,此时删除的其实是元素 4 ,而上一个元素 3 并没有被删除。此外,如果删除的是最后一个元素,it 便会指向 vec.end(...
vec.erase(vec.begin()); // 删除第一个元素 vec.clear(); // 清空整个vector 访问元素:可以通过下标操作符[]或者迭代器来访问vector中的元素。 cpp 复制 int first_element = vec[0]; // 获取第一个元素 int last_element = vec.back(); // 获取最后一个元素 ...
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始 (8)向量大小:vec.size(); (9)清空:vec.clear(); 2、重要说明 vector的元素不仅仅可以是int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。
vector迭代器遍历: vector迭代器遍历时erase删除元素 erase函数会将迭代器指针iter变为野指针,此时若继续执行++iter,会导致iter指向未知位置,...
C++中使⽤vector.erase()需要注意的事项 本⼈菜鸟⼀枚。。今天在⽤vector.erase()的时候,发现总是不能把应该erase掉的东西erase⼲净。举个栗⼦:vector<int> num_vec;num_vec.push_back(1);num_vec.push_back(3);num_vec.push_back(5);num_vec.push_back(5);num_vec.push_back(6);num...