}
print(odd.begin(),odd.end());
print(even.begin(),even.end());
system("pause");
return 0;
}
关系操作符
string 类型的关系运算
1. 如果两个容器具有相同的长度而且所有元素都相等,那么这两个容器就相
等;否则,它们就不相等。
2. 如果两个容器的长度不相同,但较短的容器中所有元素都等于较长容器中
对应的元素,则称较短的容器小于另一个容器。
3. 如果两个容器都不是对文的初始子序列,则它们的比较结果取决于所比较
的第一个不相等的元素。
所有容器都通过比较其元素对来实现关系运算
使用越界的下标,或调用空容器的 front 或 back 函数,都会
导致程序出现严重的错误。
使用下标运算的另一个可选方案是 at 成员函数 .这个函数的行
为和下标运算相似,但是如果给出的下标无效,at 函数将会抛出 out_of_range
异常
删除顺序容器内元素的操作
c.erase(p) 删除迭代器 p 所指向的元素
返回一个迭代器,它指向被删除元素后面的元素。如果 p 指向
容器内的最后一个元素,则返回的迭代器指向容器的超出末端
的下一位置。如果 p 本身就是指向超出末端的下一位置的迭代
器,则该函数未定义
c.erase(b,e) 删除迭代器 b 和 e 所标记的范围内所有的元素
返回一个迭代器,它指向被删除元素段后面的元素。如果 e 本
身就是指向超出末端的下一位置的迭代器,则返回的迭代器也
指向容器的超出末端的下一位置
c.clear() 删除容器 c 内的所有元素。返回 void
c.pop_back() 删除容器 c 的最后一个元素。返回 void。如果 c 为空容器,
则该函数未定义
c.pop_front() 删除容器 c 的第一个元素。返回 void。如果 c 为空容器,则
该函数未定义
只适用于 list 或 deque 容器
删除第一个或最后一个元素
pop_front 和 pop_back 函数用于删除容器内的第一个和最后一个元素。但
vector 容器类型不支持 pop_front 操作。这些操作删除指定的元素并返回
void。
find 函数需要一对标记查找范围的迭代器以
及一个在该范围内查找的值作参数。查找完成后,该函数返回一个迭代器,它指
向具有指定值的第一个元素,或超出末端的下一位置。
Exercise
9.26:
假设有如下 ia 的定义,将 ia 复制到一个 vector 容器
和一个 list 容器中。使用单个迭代器参数版本的 erase
函数将 list 容器中的奇数值元素删除掉,然后将
vector 容器中的偶数值元素删除掉。
int ia[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 55,
89 };
view plain
#include
#include
#include
#include
using namespace std;
void print(list
{
while(beg!=end)
{
cout<<*beg<<" ";
beg++;
}
cout<
void print(vector
{
while(beg!=end)
{
cout<<*beg<<" ";
beg++;
}
cout<
void deleteelem(list
{
int base=(flag%2==0 0:1);
list
while(head!=tail)
//这里不用更新指向容器尾端的迭代器
//因为list容器删除元素后没有出现元素的移动
{
if(*head%2==base)
head=lst.erase(head);
//巧妙利用函数返回值
else
head++;
}
}
void deleteelem(vector
{
int base=(flag%2==0 0:1);
vector
while(head!=(tail=vec.end()))
//这里要更新一下指向容器尾端的迭代器
//因为vector容器删除元素后元素要顺序前移是迭代器失效
{
if(*head%2==base)
head=vec.erase(head);
else
head++;
}
}
int main()
{
int ia[10]={0,1,2,3,4,5,6,7,8,9};
list
vector
print(odd.begin(),odd.end());
print(even.begin(),even.end());
deleteelem(odd,2);
print(odd.begin(),odd.end());
deleteelem(even,1);
print(even.begin(),even.end());
system("pause");
return 0;
}
Exercise
9.27:
编写程序处理一个 string 类型的 list 容器。在该容器
中寻找一个特殊值,如果找到,则将它删除掉。用 deque
容器重写上述程序。
view plain
#include
#include
#include
#include
using namespace std;
void Print(list
{
while(beg!=end)
cout<<*beg++<<" ";
cout<
void Print(deque
{
while(beg!=end)