vector
是一种「变长数组」,即“自动改变数组长度的数组”
it[i] = *(it+i) //这两个写法等价
vector常见用途
1、存储数据
vector本身可以作为数组使用,而且在一些元素个数不确定的场合可以很好地节省空间。
2、用邻接表存储图
使用vector实现邻接表,更为简单。
vector的定义
vector<类型名> 变量名;
类型名可以是int、double、char、struct,也可以是STL容器:vector、set、queue。
vector name;
vector name;
vector name;
vector name;
vector<vector > name;//注意:> >之间要加空格
vector容器内元素的访问
通过迭代器访问
迭代器(iterator)可以理解为指针:font color=“red”>vector<类型名>::iterator 变量名;
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> v;
for (int i = 0; i < 5; i++)
{
v.push_back(i);
}
//v.begin()返回v的首元素地址
vector<int>::iterator it=v.begin();
for (int i = 0; i < v.size(); i++)
{
cout<<it[i]<<" "; //0 1 2 3 4
}
return 0;
}
与此同时,迭代器与for循环还有一种优雅的写法。
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> v;
for (int i = 0; i < 5; i++)
{
v.push_back(i);
}
//vector的迭代器不支持it<v.end()的写法,因此循环条件只能it!=v.end()
for (vector<int>::iterator it=v.begin(); it!=v.end();it++)
{
cout<<*it<<" ";
}
return 0;
}
此种写法与遍历字符串有异曲同工之妙:
#include <iostream>
#include <vector>
using namespace std;
int main(){
string str;
str="Hello World";
for (int i = 0; str[i]!='\0'; i++)
{
cout<<str[i]<<" "; //H e l l o W o r l d
}
return 0;
}
最高阶写法(曾果粒博主完代码风格就是这样啊~)
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> v;
for (int i = 0; i < 5; i++)
{
v.push_back(i);
}
for(int it:v)
{
cout<<*it<<" ";
}
return 0;
}
vector常见函数
push_back()、pop_back() 是一对栈元素的压入和弹出
pop_back() 、erase()、clear() 删除操作:尾部一个;选删;全删
insert() 添加
size() 大小
eg: v.erase(v.begin()+3); //删除v[3]
v.clear(); // 一键清空
set
set(集合),是一个内部自动有序且不含重复元素的容器。
set的定义
像定义变量一样定义set变量: set<类型名> 变量名;
类型名可以是int、double、char、struct,也可以是STL容器:vector、set、queue。
set容器内元素的访问
set只能通过迭代器(iterator)访问:
set::iterator it;
set::iterator it;
这样,就得到了迭代器it,并且可以通过*it来访问set里的元素。
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> st;
st.insert(5);
st.insert(2);
st.insert(6);
for (set<int>::iterator it = st.begin(); it != st.end(); it++)
{
cout << *it << endl;
}
return 0;
}
我们可以看到,原本无序的元素,被插入set集合后,set内部的元素自动递增排序,并且自动去除了重复元素。
set常用函数
insert() 、erase()、size() 、find()
敲黑板:find(value)返回的是set中value所对应的迭代器,也就是value的指针(地址)。
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> st;
for (int i = 1; i <= 3; i++)
{
st.insert(i);
}
set<int>::iterator it = st.find(2); //在set中查找2,返回其迭代器
cout << *it << endl;
// 以上可以直接x携程
cout << *(st.find(2)) << endl;
return 0;
}
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> st;
st.insert(100);
st.insert(200);
st.insert(100);
st.insert(300);
set<int>::iterator it = st.find(200);
//1.删除单个元素
st.erase(st.find(100)); //利用find()函数找到100,然后用erase删除它
// 删除单个元素
st.erase(100); //删除单个元素
//2.删除一个区间内的所有元素
st.erase(it, st.end());
for (it = st.begin(); it != st.end(); it++)
{
cout << *it << endl;
}
return 0;
}