STL是学习C++不可逾越的一道沟,之前就一直想学习来着,只怪自己太懒,而且自己也一直苦于不知道从哪里下手,一个人慢慢的摸索到现在,今天终于有时间记录自己学习的过程。
STL包括算法,容器,迭代器
1.算法: 通过有限的步骤解决问题。
2.容器:序列式容器(容器的元素位置是由进入容器的时机和地点决定的)和关联式容器(容器已经有规则,进入容器的元素位置不是由时机和地点决定的)
3.迭代器:用来遍历容器里面的元素的指针。默认指向第一个位置,对指针的操作基本上都可以对迭代器操作。实际上,迭代器是一个类,这个类封装了一个指针。迭代器作为算法和容器的桥梁。
以下是对STL基础认识代码实现:
#include<iostream>
#include<vector>
#include<algorithm>
//算法,负责统计某个元素的个数
int myCount(int* start ,int* end, int val)
{
int num = 0;
while (start != end)
{
if (*start == val)
num++;
start++;
}
return num;
}
void PrintVector(int v)
{
std::cout << v << " ";
}
void Test01()
{
//定义一个容器,并且指定这个容器村存放的类型是int
std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
std::vector<int>::iterator pBegin = v.begin();
std::vector<int>::iterator pEnd = v.end(); //最后一个的下一个
//因为容器可能存放基本的数据类型,也可能存放自定义的数据类型
std::for_each(pBegin, pEnd, PrintVector);
}
//容器存放自定义的数据类型
class Person
{
public:
Person(int age, int id) :age(age), id(id) {}
public:
int age;
int id;
};
void Test02()
{
std::vector<Person> v;
Person p1(10, 11), p2(20, 21), p3(30, 31);
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
//遍历
for (std::vector<Person>::iterator iter = v.begin(); iter != v.end(); iter++)
{
std::cout << (*iter).age<< " "<<(*iter).id;
}
}
//可以试着实现 : 容器存放person类型的指针并且打印出来
// 容器嵌套容器, 一个容器作为另一个容器的元素
int main()
{
//数组 也是容器(但是不是标准模板库里面的)
int arr[] = { 0,8,3,5,7,7,7};
int* begin = arr; //迭代器的开始位置
int* end = &arr[sizeof(arr) / sizeof(int)];
int num = myCount(begin, end, 7);
std::cout << "num : " << num << std::endl;
std::cout << "======================"<<std::endl;
Test01();
Test02();
system("pause");
return 0;
}