C++程序设计之STL模板(常用容器及迭代器)

本文详细介绍了C++ STL模板中的常用容器,包括vector、string、set、multiset、map等,以及如何使用迭代器、插入、删除、访问元素等操作。还特别讨论了string容器的字符串处理和set容器的红黑树实现,强调了各容器的特性与应用场景。
摘要由CSDN通过智能技术生成

参考:《ACM程序设计》——曾宗根

STL模板

1. vector向量容器

vector向量容器可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,用来代替数组

vector具有内存自动管理的功能,对于元素的插入和删除,可以动态调整所占的内存空间 vector容器有两个重要的方法,begin(),end() begin()返回的识首元素位置的迭代器,end()返回的是最后一个元素的下一个元素位置的迭代器。

创建vector对象

常用以下三种方式:

(1)不指定容器的元素个数,如定义一个用来存储整型的容器:

vector<int> v;  

(2)创建时指定容器的大小,如定义一个用来存储10个double类型的向量容器

vector<double> v(10);

元素的下标是0~9;另外,每个元素的值被初始化为0.0

(3)创建一个具有n个元素的向量容器对象,每个元素具有指定的初始值

vector<double> v(10,8.6);

上述语句定义了v向量容器,共有10个元素,每个元素的值是8.6

尾部元素扩张

通常使用push_back()在尾部追加新元素,尾部追加元素,容器会自动分配新内存空间.可对空的vector对象扩张,也可对已有元素对象扩张

vector<int>v;
v.push_back(1);

下标方式访问vector元素

采用下标方式随意访问它的某个元素,也可以以下标方式对某元素重新赋值,这点类似于数组的访问方式

用迭代器访问vector元素

使用迭代器配合循环语句来对vector对象进行遍历访问,迭代器的类型一定要与遍历的vector对象的元素类型一致

//定义迭代器变量
vector<int>::iterator it;
for(it = v.begin();it != v.end();it++)
{
//输出迭代器上元素值
cout << *it << " ";
}

元素的插入

insert()可以在vector对象的任意位置之前插入一个新的元素,同时vector自动扩张一个元素空间,插入位置之后的元素依次向后挪动一个位置

注意 insert()插入的位置是元素的迭代器位置,而不是与元素的下标

元素的删除

erase()可以删除vector中迭代器所指的一个元素或一段区间重点所有元素 clear()则可以一次性删除vector中的所有元素

reverse反向排列算法

定义头文件

#include<algorithm>

可将向量中某段迭代器区间元素反向排列

reverse(v.begin,v.end());

使用sort算法对向量元素排序

声明头文件,使用随机访问迭代器进行排序,默认升序排列,可以自己设计排序比较函数,把这个函数指定给sort算法

向量的大小

使用size()返回向量的大小

使用empty()返回向量是否为空,非空返回逻辑假 即0

2.string字符串容器

C语言只有char类型处理字符,字符串数组可以用string基本字符系列容器来处理,它提供了添加,删除,替换,查找和比较等丰富的方法。 使用string容器,需要头文件包含声明

#include<string>
  • 创建string对象

    string s;
    

s是一个空字符串,其长度为0

给string对象赋值

(1)直接给字符串对象赋值

string s;
s = "hello";

(2)把字符的字符指针赋给一个字符串对象

string s;
char ss[100];
scanf("%s",&ss);
s = ss;

在string对象的尾部添加一个字符(char),采用“+”操作符

string s;
s = s + 'a';
s = s + 'b';
s = s + 'c';

从string对象尾部追加字符串

(1)直接使用'+‘操作符

string s;
s = s + "abc";

(2)采用append()方法

string s;
s.append("123");

给string对象插入字符

用insert()方法把一个字符插如到迭代器位置之前

string s;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值