优点:
代码高复用性
功能强大
性能高效
开源,可以跨平台
代码分支:
HP STL (第一个C++版本)
P.H.Plauger STL(VS)
Rouge Wave STL(C++ Builder)
STLport
SGI STL(GCC)
STL组件:
迭代器(iterator)
容器(Cobrainer)数组,链表…
算法(algorithm)排序…
仿函数(functor)
适配器(asaoter)
空间适配器(allocator)
迭代器
如何两个函数变成一个函数,实现代码的复用(模板)
迭代器的种数“
输入迭代器:只能是右值,只读 =, == ,!= ,++i ,i++
输出迭代器:只能是左值,只写=, == ,!= ,++i ,i++
前向迭代器:可读可写=, == ,!= ,++i ,i++
双向迭代器:可读可写=, == ,!= ,++i ,i++。–i,i–
随机访问迭代器:可读可写=, == ,!= ,++p ,p++。–p,p–,p+i,p-i,p[i],p<p1,p>p1,+=,-=
存在包含关系,只有输出迭代器是独立的,==一层一层向上包含
迭代器:文章来源:https://www.toymoban.com/news/detail-607357.html
#include <iostream>
#include <iterator>
int main() {
std::iterator<std::output_iterator_tag, int> obj;
std::cout << typeid(obj).name() << std::endl;
//迭代器的类型
std::cout << typeid(std::iterator<std::input_iterator_tag, char>::iterator_category).name() << std::endl;
//迭代器指向的真实的值的类型
std::cout << typeid(std::iterator<std::input_iterator_tag, char>::value_type).name() << std::endl;
//迭代器指向的真实类型的指针
std::cout << typeid(std::iterator < std::input_iterator_tag, char>::pointer).name() << std::endl;
//迭代器指向的真实类型的引用
std::cout << typeid(std::iterator<std::input_iterator_tag, char>::reference).name() << std::endl;
//迭代器指向的指针之间的差值
std::cout << typeid(std::iterator<std::input_iterator_tag, char>::difference_type).name() << std::endl;
int arr[] = { 1,2,3,4,5,6,7,8,9 };
std::iterator<std::input_iterator_tag, int>::value_type a = arr[0];
std::iterator<std::input_iterator_tag, int>::value_type b = arr[8];
//std::cout << a << "\t" << b << "\t";
std::iterator<std::input_iterator_tag, int>::pointer c = &a;
std::iterator<std::input_iterator_tag, int>::pointer d = &a + 4;
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
std::cout << d << std::endl;
std::iterator<std::input_iterator_tag, int>::difference_type e = d - c ;
std::cout << e << std::endl;
return 0;
}
如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!文章来源地址https://www.toymoban.com/news/detail-607357.html
到了这里,关于【C++STL标准库】迭代器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!