A. vector 删除操作
vector <int> v;
v.pushback(0);
v.pushback(1);
v.pushback(1);
v.pushback(0);
想要删除值为1的元素
正确代码
vector<int>::iterator itr = v.begin();
while (itr!=v.end())
{
if (*v==1)
{
itr=v.erase(itr);
}
else
itr++;//这里迭代器会更新出错
}
每一次删除之后,后边的元素都会向前移动。
所以当前迭代器实际已经指向下一个元素,若再+1,实际上是指向了下一个元素的下一个元素。
以下为上述程序的详细执行过程
int main(int argc, char* argv[])
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
vector<int>::iterator itr = v.begin();
vector<int>::iterator tem = v.begin();
while(itr!=v.end())
{
cout<<"line1"<<*itr<<endl;
tem=itr;
itr++;
cout<<"line2"<<*itr<<endl;
v.erase(tem);
cout<<"line3"<<*itr<<endl;
}
printf("删除后的长度为%d",v.size());
return 0;
}
B. 怎样在c++ 中删除vector最后一个元素
c++可以使用 vector 的成员函数 pop_back() 来删除容器尾部的元素。
vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
(2)vector如何删除元素扩展阅读:
vector的缺点:
1、时间开销较大,运行速度与数组相比较慢。
2、clear()无法清空内存。
注意:vector属于std命名域的,因此需要通过命名限定。
建议在代码量不大,并且使用的命名空间不多的情况下,使用全局的命名域方式:using namespace std函数。
vector常用方法:
1、c.assign(beg,end) c.assign(n,elem)将(beg; end)区间中的数据赋值给c。将n个elem的拷贝赋值给c。传回索引idx所指的数据,如果idx越界,抛出out_of_range。
2、c.back(),传回最后一个数据,不检查这个数据是否存在。
3、c.begin(),传回迭代器中的第一个数据地址。
4、c.capacity(),返回容器当前已分配的容量。
5、c.clear(),移除容器中所有数据。
6、c.empty(),判断容器是否为空。
c.end() //指向迭代器中末端元素的下一个,指向一个不存在元素。
c.erase(pos)//删除pos位置的数据,传回下一个数据的位置。
c.erase(beg,end)
删除[beg,end)区间的数据,传回下一个数据的位置。
7、c.front(),传回第一个数据。
参考资料来源:网络-vector
C. 在vector中,怎样删除某个指定值的元素
删除vector指定位置的元素,参考如下:
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
std::vector<int> vec;
for(int i=0;i<100;i++)
{
vec.push_back(i);
}
printf("10:%d\n",vec[10]);
printf("size:%d\n",vec.size());
printf("**********************************\n");
std::vector<int>::iterator it = vec.begin()+10;
vec.erase(it);
printf("10:%d\n",vec[10]);
printf("size:%d\n",vec.size());
return 0;
}
D. C++中怎么删除vector中的一个元素
C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法。
C++ 中std::remove()并不删除元素,因为容器的size()没有变化,只是元素的替换。
代码:std::vector::erase()函数原型:iterator erase (iterator position);//删除指定元素
iterator erase (iterator first, iterator last);//删除指定范围内的元素返回值:指向删除元素(或范围)的下一个元素。
positions.erase(positions.begin() + i)
注意删除之后vector大小已经变化, 循环控制条件要注意变化
c.pop_back
c的最后一个元素,返回void。
(4)vector如何删除元素扩展阅读:
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++语言中定义了丰富的运算符,如算术运算符、关系运算符、逻辑运算符等等,有些运算符需要两个操作数,使用形式为
<操作数1>运算符<操作数2>
这样的运算符称为二元运算符(或二目运算符)。另一些运算符只需要一个操作数,称为一元运算符(或单目运算符)。
运算符具有优先级与结合性。当一个表达式包含多个运算符时,先进行优先级高的运算,再进行优先级低的运算。
参考资料来源:网络-c++
E. 如何删除容器vector里面的所有元素
clear() 清空所有元素
empty() 判断Vector是否为空(返回true时为空)
erase() 删除指定元素 (可以用指针来代替迭代器)
iterator erase( iterator loc ); //要删除元素的迭代器
iterator erase( iterator start, iterator end ); //要删除的第一个元素的迭代器,要删除的第二个元素的迭代器
insert() 插入元素到Vector中
iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器
void insert( iterator loc, size_type num, const TYPE &val ); //在指定位置loc前插入num个值为val的元素
void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入区间[start, end)的所有元素
pop_back() 移除最后一个元素
push_back() 在Vector最后添加一个元素(参数为要插入的值)
F. vector 如何获取并删除一个元素
pop_back () 操作。
----------------------------------------------
#include <vector>
using namespace std;
void main(void)
{
vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
array.push_back(4);
array.push_back(5);
vector<int>::iterator itr = array.begin();
while (itr != array.end)
{
if (*itr == 3)array.erase(itr);//删除值为3的元素
++itr;
}
}
//若是最后一个可用array.pop_back()
-------------------
删除所有偶数项,并打印出删除的项
1. vector/queue
正确方法1:
void erase(vector<int> &v)
{
for(vector<int>::iterator vi=v.begin();vi!=v.end();)
{
if(*vi % 2 == 0)
{
cout << "Erasing " << *vi << endl;
vi = v.erase(vi);
}
else ++vi;
}
}
正确方法2:
void erase2(vector<int> &v)
{
for(vector<int>::reverse_iterator ri=v.rbegin();ri!=v.rend();)
{
if(*ri % 2 == 0)
{
cout << "Erasing " << *ri << endl;
v.erase((++ri).base()); //erase()函数期待的是正向iterator,故而这里要调
//用base()函数将逆向iterator转换为正向的
}
else ++ri;
}
}
G. C++ 如何删除vector中的元素
用迭代器和erase方法(vector做删除效率很低哦)
举个例子:从一个vector里删除偶数,用迭代器做写入操作时要注意迭代器位置状态
#include<iostream>
#include<vector>
usingnamespacestd;
intmain()
{
vector<int>iv;
for(inti=1;i<10;++i)
{
iv.push_back(i);
}
vector<int>::iteratorit=iv.begin();
while(it<iv.end())
{
if(*it%2==0)
{
it=iv.erase(it);
continue;//删除后it已经指向下一个元素了,所以不能++了,直接continue
}
++it;
}
for(it=iv.begin();it<iv.end();++it)
cout<<*it<<endl;
return0;
}