stl模板库学习强烈推荐
在学习stl的过程中,推荐一个C++函数查找手册,接下来的过程主要结合该手册讲解stl的用法。C++语言参考_百度网盘提取码:6666,学习STL之前需要熟悉基本的C++语法与函数模板的概念
Vectors容器
Vectors直译过来就是向量的意思,可以将他认为是一个可以自动改变数组长度的数组,其底层实现同样是用顺序表(数组)实现的,访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。在使用Vectors之前需要添加头文件
#include<vector>//注意不是vectors
using namespace std;
Vectors的定义
vector<类型名> 变量名;
//其中,类型名不仅可以是int,char等,甚至还可以是stl的各种容器
vector<int> test;
vector<double> test;
vector<char> test;
vector<struct node> test;
vector<vector<int> > test;//注意:> >之间要加空格
Vectors的使用
初始定义以后,例如vector<int> test;
,则test中为空,可以用test.size()查看其中的元素个数,查看以后为0;除此之外,还可以用其他的函数例如push_back()等为这个vector添加元素等等,对一个Vector的操作有很多,具体在前文所说的C++语言参考中有详细的介绍。下面重点介绍Vectors怎么访问,这是C++语言参考中所没有提到的。
1,通过下标进行访问
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> test;
test.push_back(1);//为vector添加一个元素
cout << test[0]<<endl;//访问test中的第0个元素
test.push_back(2);
test.push_back(3);
test.push_back(4);
test.push_back(5);
for (int i = 0; i < test.size(); i++)//遍历整个test
{
cout << test[i] << endl;
}
}
2,使用迭代器进行访问
这里需要首先理解迭代器是什么东西,其定义如下:
vector<类型名>::iterator 变量名;
vector<int>::iterator it;//一个例子,此时it所指向
该语句定义了一个vector<类型名>类型的迭代器,可以将迭代器看作指针,使用上面的例子,可以使用*it访问其所指向的内容,也可以对它进行++操作,例如it++,具体操作例子如下
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> test;
test.push_back(1);//为vector添加一个元素
cout << test[0]<<endl;//访问test中的第0个元素
test.push_back(2);
test.push_back(3);
test.push_back(4);
test.push_back(5);
vector<int>::iterator it;//test.begin()返回test的头迭代器,具体函数使用详见C++语言参考
for (it = test.begin(); it < test.end(); it++)//第一种遍历方法,比较简洁,遍历整个test
{
cout << *it << endl;
}
//
it = test.begin();
for (int i = 0; i < name.size(); i++)//第二种遍历方法
{
cout << it[i]<<"="<<*(it+i)<<endl;
}//本用法意在说明it[i]同样可以访问name中的第i个元素,且*(it+i)=it[i],注意体会
}
Lists容器
Lists容器对应数据结构为链表,其底层实现为双向链表,它可以很方便的进行插入与删除,但不能同Vectors一样进行随机访问,所以只能通过迭代器进行访问,各种详细操作见C++语言参考,提取码:6666,使用Lists需要添加头文件
#include<List>//注意不是Lists
using namespace std;
Stacks容器
Stacks容器是一个堆栈容器,和栈一样有着先进后出的操作特性,该容器的操作函数在C++语言参考中有详细的解释,过于简单,就不多做介绍,其定义方法类似Vectors,不能如同Vectors一样随机访问,只能通过其本身的函数访问栈顶。各种详细操作见C++语言参考,提取码:6666,使用Stacks时需要添加头文件
#include<Stack>//注意不是Stacks
using namespace std;
Queues容器
Stacks容器是一个队列容器,和队列一样有着先进先出的操作特性,该容器的操作函数在C++语言参考中有详细的解释,过于简单,就不多做介绍,其定义方法类似Vectors,不能如同Vectors一样随机访问,只能通过其本身的函数访问队头或队尾。各种详细操作见C++语言参考,提取码:6666,使用Queues时需要添加头文件