C++学习第九篇(容器)

本文详细介绍了C++STL中的几个重要容器,包括vector的动态数组特性、迭代器使用、vector和string的构造、赋值、操作以及deque、stack、queue、list、set、multiset和map的特性和功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0,STL初识

STL(Standard Template Library)标准模板库,主要是为了提高数据结构和算法的复用性。

一,vector

0,可以理解为动态数组,简单用法:
(1)需要引入头文件< vector>;
(2)其底层实现较为复杂,可以用迭代器(可理解为指针)来执行遍历操作,下例中v.begin()指向的是首元素,v.end()指向的是最后一个元素的下一个位置(注意不可访问);
(3)第三种遍历方法是采用了算法库(需要引入头文件algorithm)里的for_each,这个函数有三个参数,分别是迭代器的头、尾、需要对每个元素执行的操作函数名字;
(4)自动维护空间大小与位置,如果容量不够了,会自动找到新的位置,并把现有的数据都转移过去

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;
void printInt(int value) {
   
	cout << value << endl;
}
void test001() {
   
	vector<int> v;

	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);

	//遍历方式一:
	vector<int>::iterator itBegin = v.begin();
	vector<int>::iterator itEnd = v.end();
	cout << "第一种遍历方式:" << endl;
	while (itBegin != itEnd) {
   
		cout << *itBegin << endl;
		itBegin++;
	}
	//遍历方式二:
	cout << "第二种遍历方式:" << endl;
	for (vector<int>::iterator it = v.begin(); it != itEnd; it++) {
   
		cout << *it << endl;
	}

	//遍历方式三:
	cout << "第三种遍历方式:" << endl;
	for_each(v.begin(), v.end(), printInt);
}
int main() {
   
	test001();
}

1,构造函数
构造函数较多,灵活使用即可

vector<T> v;
vector(v.beg, v.end);
vector(n, elm);
vector(const vector& v);

2,赋值
主要重载运算符=,和assign()函数

vector& operator=(const vector& v);
assign(v.beg, v.end);    //v容器的某一片段,beg和end表示这段的开始和结尾
assign(n, elm);          //n个元素elm赋值给本身

3,容量与大小
有一些常用操作,并且要注意这里有容量和实际的元素数量,这是两个不同的概念,一般容量是要大于元素数量。而且只能放大容量而不能收缩

empty();    //判断是否为空
capacity();  //当前容器的容量
size();   // 当前容器内元素数量
resize(int num); //重新指定容器的元素数量为num,若比现在大,新的空间会创建默认对象,若比现在小,其容量不变,只把元素数重置为num
resize(int num, elm);   //重新指定容器的元素数量为num,空的填充elm

4,插入和删除
常用的操作

push_back();  //往最后一个位置插入元素
pop_back();  //删掉最后一个元素
insert(const_iterator pos, elm);   //往迭代器位置插入元素
insert(const_iterator pos, int count, elm);   //往迭代器位置插入count个元素elm
erase(const_iterator pos);       //删掉迭代器位置的元素
erase(const_iterator start, const_iterator end);  //删除从start到end这段区间的元素
clear();    //清空容器

5,数据存取
常用操作,重载了运算符[],也可以用at()函数,注意这些返回的都是具体的元素,而不是迭代器指针

operator
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值