C++笔记--STL编程
Posted xiangjai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++笔记--STL编程相关的知识,希望对你有一定的参考价值。
容器
Vector
说明:
vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预
vector是一个模板类。。在使用模板类的时候,需要指明具体的类型
例如
vector<int> v1(5); //相当于 int v1[5];
当需要使用数组的情况下,可以考虑使用vector
特点:
(1) 一个动态分配的数组(当数组空间内存不足时,都会执行: 分配新空间-复制元素-释放原空间);
(2) 当删除元素时,不会释放限制的空间,所以向量容器的容量(capacity)大于向量容器的大小(size);
(3) 对于删除或插入操作,执行效率不高,越靠后插入或删除执行效率越高;
(4) 高效的随机访问的容器;
示例
#include "vector"
using namespace std;
int main() {
vector<int> arr(5);
arr.push_back(1);
for(int i=0; i<arr.size(); i++) {
cout << arr[i] << " ";
}
return 0;
}
Stacks(堆栈)
先进后出的数据结构
#include "stack"
using namespace std;
struct Teacher {
char name[128];
int age;
};
void testStack() {
Teacher t1{"test1", 11};
Teacher t2{"test2", 22};
stack<Teacher *> teachers;
teachers.push(&t1);
teachers.push(&t2);
while (!teachers.empty()) {
Teacher *temp = teachers.top();
cout << "teacher: " << temp->name << ", " << temp->age << endl;
teachers.pop();
}
}
Queues(队列)
先进先出(FIFO)的数据结构
#include "queue"
using namespace std;
void testQueue() {
queue<int> q;
q.push(1);
q.push(3);
q.push(2);
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
}
list(双向链表)
特点:
链表,双向链表,只能顺序访问,不能使用[]进行随机访问
#include "list"
using namespace std;
void testList() {
list<int> lists;
lists.push_back(1);
lists.push_back(3);
}
set/multiset
特点:
构造set集合的主要目的是为了快速检索,去重与排序
(1) set存储的是一组无重复的元素,而multiset允许存储有重复的元素;
(2) 如果要修改某一个元素值,必须先删除原有的元素,再插入新的元素
迭代器
正向迭代器
定义方法如下: 容器类名::iterator 迭代器名;
#include "list"
using namespace std;
void testList() {
list<int> lists;
lists.push_back(1);
lists.push_back(3);
list<int>::iterator iter = lists.begin();
for(; iter != lists.end(); iter++) {
cout << " " << (*iter);
}
}
反向迭代器
定义方法如下:容器类名::reverse_iterator 迭代器名;
以上是关于C++笔记--STL编程的主要内容,如果未能解决你的问题,请参考以下文章
C++笔记--面向对象(OOP)编程基础--STL入门与使用
STL标准库 & 范型编程学习笔记(10):hashtable深度探索
STL标准库 & 范型编程学习笔记(10):hashtable深度探索