1. vector中常用的插入和刪除操作
insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count個元素ele.
push_back(ele); //尾部插入元素ele
pop_back();//刪除最後一個元素
erase(const_iterator start, const_iterator end);//刪除迭代器從start到end之間的元素
erase(const_iterator pos);//刪除迭代器指向的元素
clear();//刪除容器中所有元素
2. 想要刪除vector中符合條件的元素,使用erase:
在c++中,erase重載了2個函數,分別是:刪除迭代器指向的元素和刪除迭代器區間中的所有元素。
- (1)刪除vector中指定元素。(注意:重載的這兩
erase
函數的返回值都是指向下一個元素的迭代器)
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<numeric>
using namespace std;
void PrintData(vector<int>& vec)
{
for(auto val:vec)
{
cout<<val<<" ";
}
cout<<endl;
return;
}
void DeleteElem()
{
int arr[] = {1,2,3,5,4,5,6,5,5,7,8,5};
int len = sizeof(arr)/sizeof(int);
vector<int> vec(arr,arr+len);
PrintData(vec);
cout<<"刪除vec中所有值爲5的元素."<<endl;
vector<int>::iterator it = vec.begin();
for(;it != vec.end();)
{
if(*it == 5)
//刪除指定元素,返回指向刪除元素的下一個元素的位置的迭代器
it = vec.erase(it);
else
//迭代器指向下一個元素位置
++it;
}
PrintData(vec);
}
int main()
{
DeleteElem();
system("pause");
return 0;
}
輸出結果:
1 2 3 5 4 5 6 5 5 7 8 5
刪除vec中所有值爲5的元素.
1 2 3 4 6 7 8
請按任意鍵繼續. . .
- (2)刪除
std::map
中嵌套std::map
的指定key
。如下代碼,刪除std::map<std::string,std::map<std::string,int>>
中key
爲“444”
的值value
。
/**@fn traverseMap
* @brief 遍歷map容器元素
* @param[in] m 容器元素
* @param[out] VOID
* @return VOID
**/
void traverseMap(std::map<std::string,std::map<std::string,int>> &m, bool bDelete = false)
{
assert(m.size());
auto it = m.begin();
while(it != m.end())
{
if(bDelete&&!strncmp("444",it->first.c_str(),strlen("444")))
{
m.erase(it++);
}
else
{
std::cout<<it->first<<" ";
map<std::string,int>::const_iterator it1 = it->second.begin();
while(it1 != it->second.end())
{
std::cout<<it1->first<<" "<<it1->second<<std::endl;
++it1;
}
++it;
}
}
}
/**@fn Test
* @brief 初始化map容器
* @param[in] VOID
* @param[out] VOID
* @return VOID
**/
void Test()
{
map<std::string,map<std::string,int>> m;
//方法1
m["000"]["aaa"] = 66;
std::map<std::string,int> v1;
v1.insert(map<std::string,int>::value_type("bbb",77));
//方法2
m.insert(map<std::string,std::map<std::string,int>>::value_type("111",v1));
std::map<std::string,int> v2;
v2.insert(pair<std::string,int>("ccc",88));
//方法3
m.insert(pair<std::string,std::map<std::string,int>>("222",v2));
std::map<std::string,int> v3;
v3.insert(make_pair<std::string,int>("ddd",99));
//方法4
//error: no matching function for call to 'make_pair(const char [4], std::map<std::__cxx11::basic_string<char>, int>&)'
//m.insert(make_pair<std::string,std::map<std::string,int>>("333",v3)); ^
//m.insert(make_pair<std::string,std::map<std::string,int>>("333",v3));
//方法5
std::map<std::string,int> v4;
v4["eee"] = 100;
m["444"] = v4;
traverseMap(m);
std::cout<<"==================================================="<<std::endl;
//現在刪除map中key爲"444"的值value
traverseMap(m,true);
std::cout<<"==================================================="<<std::endl;
}
結果如下: