STL、Vector、Set基础
1.STL
c++提供了一套标准模板库——STL
包含三大组件:
-
容器:
存储数据的数据结构,类模板的实例,常见的有vector,set,string,map
-
算法:
用于操作容器内数据的函数模板,可以应用于任何兼容的容器,常见的有sort,find,copy
-
迭代器:
用于遍历容器元素的,像指针的对象,提供容器内数据访问能力,是算法与容器之间的桥梁,便于算法与不同容器的无缝衔接
2.Vector
代表一个可以动态调整大小的数组,长度根据需要自动增长或缩小
#include <vector>
Vector
的定义
typename
可以为任何基本数据类型,int,double,char,struct结构体等,甚至是STL容器如vector,set,queue等
name为定义的容器名字
注意:当typename
为另一个STL容器时,例如vectoer <vector <int> >
,在>>之间要加上空格,以免被老编译器识别成移位操作符
vector <typename> name;
Vector
内元素的访问
1.通过下标访问:
index
从0
开始,直到vectorname.size() - 1
vectorname [index];
2.通过迭代器访问:
迭代器的定义:
itname
为迭代器
vector <typename>::iterator itname = vi.begin(); //将迭代器指向vi的第一个元素
实例:
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector <int> vi;
for (int i = 1; i<=5;i++)
{
vi.push_back(i);
}
//vi.begin()取得vi的首元素,把it指向这个首元素
vector <int>::iterator it = vi.begin();
for (int i = 0;i < 5;i++)
{
printf("%d", *(it + i));
}
return 0;
}
Vector
常用函数
vi.push_back(element);//向vi的末尾添加一个新元素
vi.pop_back();//删除vi中最后一个元素
vi.size();//返回vi中元素的个数
vi.clear();//删除vi中所有的元素,让其变为空
vi.inser(it,element);//在it迭代器指定的位置插入一个新元素
vi.erase(it);//删除it迭代器指定位置的元素
3.Set
Set是STL中的一种有序容器,确保其内部元素唯一性(自动去除重复元素),顺序性(默认升序)
使用前需要包含头文件
#include <set>
Set
的定义:
typename
可以是任何基本数据类型,也可以是自定义类型
set <typename> name;
Set
内元素的访问:
不支持下标访问,只支持迭代器访问元素
迭代器的定义:
itname
为迭代器
st.end()
是一个特殊的迭代器,它表示集合中最后一个元素之后的位置。这是一种用于标记迭代结束的方式,类似于在遍历数组或其他容器时,当迭代器到达容器末尾后的状态
set <typename>::iterator itname;
实例:
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> st;
st.insert(3);
st.insert(5);
st.insert(2);
st.insert(3);
//不支持it < st.end()的写法,st.end()指的是末尾的下一个元素
for (set<int>::iterator it = st.begin(); it!= st.end(); it++)
{
cout << *it << " ";//输出2 3 5
}
cout << endl;
return 0;
}
Set
常用函数
st.insert(element);//将一个新元素插入st
st.find(element);//在st中查找一个元素,找到返回指向该元素的迭代器,找不到返回st.end()
st.erase(element);//删除st中指定的元素
st.size();//返回st中元素的个数
st.clear();//删除st中所有的元素
标签:容器,Set,迭代,STL,vi,元素,st,Vector
From: https://blog.csdn.net/m0_60046831/article/details/144941430