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;
}