使用push_back()
将一个元素追加到尾部。
适合的容器有:除了array和forward_list外,每个顺序容器(包括string)都支持。
使用push_front
将一个元素追加到头部。
适合的容器有:list,forward_list和deque。
使用insert
在容器中任意位置插入0个或多个元素。
适合的容器有:vector,deque,list和string。forward_list提供了特殊的版本的insert成员。
//在顺序容器中添加元素
//c.push_back(t)
//c.push_front(t)
//c.insert(p,t)
//c.insert(p,n,t)
//c.insert(p,b,e)
//容器元素都是副本
//添加元素可能会使迭代器失效
//避免存储end操作返回的迭代器
#include<iostream>
#include <vector>
#include <list>
#include <string>
#include <deque>
using namespace std;
int main()
{
vector<string> svec;
list<string> slist;
deque<string> sdeq;
svec.push_back("bill");
svec.push_back("tom");
svec.push_back("mary");
slist.push_back("bill");
slist.push_back("tom");
slist.push_back("mary");
sdeq.push_back("bill");
sdeq.push_back("tom");
sdeq.push_back("mary");
sdeq.push_front("primer");
sdeq.push_front("c++");
list<int> ilist;
ilist.push_back(10);
ilist.push_back(20);
ilist.push_back(30);
list<int>::iterator first = ilist.begin();
while (first!=ilist.end())
{
ilist.insert(first, 42);
++first;
}
for (list<int>::iterator i = ilist.begin();
i != ilist.end(); ++i)
cout << *i << endl;
cout << endl;
for (list<string>::iterator iter = slist.begin();
iter != slist.end(); ++iter)
cout << *iter << endl;
cout <<endl<<"++it:"<<endl;
list<string>::iterator it = slist.begin();
cout << *it << endl;
++it;
cout <<endl<< *it << endl;
cout <<endl<<"isert():"<< endl;
slist.insert(it, 10, "hi");
for (list<string>::iterator iter = slist.begin();
iter != slist.end(); ++iter)
cout << *iter << endl;
cout << endl;
string sarray[4] = { "qusai", "simba", "frollo", "scar" };
it = slist.begin();
cout << *it << endl;
slist.insert(it, sarray + 1, sarray + 3);
for (list<string>::iterator iter = slist.begin();
iter != slist.end(); ++iter)
cout << *iter << endl;
cout << endl;
return 0;
}
9.3.2访问元素
//访问元素
//c.back()
//c.front()
//c[n]
//c.at(n)
//c[n]和c.at(n)只合适vector和deque容器
#include <iostream>
#include <vector>
#include <list>
#include <deque>
using namespace std;
int main()
{
vector<int> ivec;
ivec.push_back(10);
ivec.push_back(20);
ivec.push_back(30);
cout << endl;
cout << ivec.front() << endl;
cout << ivec.back() << endl;
cout << endl;
vector<int>::reference a = ivec.front();
vector<int>::reference b = ivec.back();
cout << a << endl;
cout << b << endl;
cout << endl;
cout << *ivec.begin() << endl;
cout << *--ivec.end() << endl;
cout << endl;
vector<int>::reference c = *ivec.begin();//返回一个引用
vector<int>::reference d = *--ivec.end();
cout << c << endl;
cout << d << endl;
cout << endl;
cout << ivec[0] << endl;
cout << ivec[1] << endl;
cout << ivec[2] << endl;
cout << endl;
cout << ivec.at(0) << endl;
cout << ivec.at(1) << endl;
cout << ivec.at(2) << endl;
try
{
cout << ivec.at(300) << endl;
}
catch (out_of_range)
{
cout << "出错了:下标越界。" << endl;
}
cout << endl;
list<int> ilist;
ilist.push_back(100);
if (!ilist.empty())
{
cout << ilist.front() << endl;
cout << ilist.back() << endl;
}
return 0;
}
9.3.3删除元素
pop_front和pop_back成员函数
pop_front和pop_back成员函数分别删除首元素和尾元素。vector和string不支持。
//删除容器
//c.erase(p)
//c.erase(b,e)
//c.clear()
//c.pop_back()
//c.pop_front()只适用于list和deque容器
#include<iostream>
#include <list>
#include <string>
using namespace std;
int main()
{
list<string> slist;
slist.push_back("apple");
slist.push_back("bill");
slist.push_back("cat");
slist.push_back("dog");
slist.push_back("egg");
slist.push_back("fish");
slist.push_back("girl");
for (list<string>::iterator iter = slist.begin();
iter != slist.end(); ++iter)
cout << *iter << endl;
slist.pop_front();
slist.pop_back();
string s1("dog");
string s2("fish");
list<string>::iterator iter1 = find(slist.begin(), slist.end(), s1);
list<string>::iterator iter2 = find(slist.begin(), slist.end(), s2);
if (iter1 != slist.end() && iter2 != slist.end())
slist.erase(iter1, iter2);
else
cout << "没有找到" << endl;
//if (iter != slist.end())
// slist.erase(iter);
//else
// cout << "没有找到" << endl;
slist.clear();
if (!slist.empty())
for (list<string>::iterator iter = slist.begin();
iter != slist.end(); ++iter)
cout << *iter << endl;
else
cout << "容器是空的!" << endl;
return 0;
}