STL(一)(container,algorithm,iterator)

STL中的sort(),因为封装在命名空间std中,STL中的sort()算法编译为std::sort(),从而避免了名字名字冲突。
则有文件开头必加:using namespace std;
STL算法:用来操作容器中数据的模板函数,主要由头文件(“algorithm”,“numeric”,“functional”)组成。
STL大概包含了100个实现算法的模板函数,
eg:
STL用sort()对一个vector中的数据进行排序,用find搜索一个list中的对象。STL不仅可以对内置数据类型的数据进行排序,也可以对自定义的结构体数据排序,不仅可以递增排序,也可按照程序员的要进行排序(如递减)。
algorithm: 增,删,改,查,复制,排序,合并。
numeric: 只包含几个简单的数学运算的模板函数。
functional:其中定义了一些模板类,用于声明关系函数对象。
eg一个吧:
#include
using namespace std;
void main()
{
int a[] = { 2, 5, 4, 1, 3 };
sort(a, a + 5);
for (int i = 0; i < 5; i++)
printf("%d", a[i]);
printf("/n");
}
STL迭代器:用于访问容器中的数据对象。如何访问只有容器自己知道。
常有迭代器:
(1)iterator指向容器中存放元素的迭代器,正向遍历容器中的元素。
(2)const_iterator:指向容器中存放元素的常量迭代器,只能读取容器中的元素。
(3)reverse_iterator:指向容器中存放元素的反向迭代器,反向遍历容器中的元素。
(4)const_reverse_iterator:指向容器中存放元素的常量反向迭代器,只能读取容器中的元素。
下面以一个程序4次分别实现:
(1)#include
using namespace std;
void main()
{
vectormyv;
vector::iterator it;
myv.push_back(1);
myv.push_back(2);
myv.push_back(3);
for (it=myv.begin(); it!= myv.end(); ++it)
printf("%d", *it);
printf("\n");
}
(2)
#include
using namespace std;
void main()
{
vectormyv;
vector::const_iterator it;
myv.push_back(1);
myv.push_back(2);
myv.push_back(3);
for (it=myv.begin(); it!= myv.end(); ++it)
printf("%d", *it);
printf("\n");
}
(3)
#include
using namespace std;
void main()
{
vectormyv;
vector::reverse_iterator it;
myv.push_back(1);
myv.push_back(2);
myv.push_back(3);
for (it=myv.rbegin(); it!= myv.rend(); ++it)
printf("%d", *it);
printf("\n");
}
(4)
#include
using namespace std;
void main()
{
vectormyv;
vector::const_reverse_iterator it;
myv.push_back(1);
myv.push_back(2);
myv.push_back(3);
for (it=myv.rbegin(); it!= myv.rend(); ++it)
printf("%d", *it);
printf("\n");
}

猜你喜欢

转载自blog.csdn.net/qq_42403069/article/details/86099238