顺序容器为开发者提供了控制元素存储和访问顺序的能力,顺序不依赖元素的值,而是元素加入元素容器时的位置相对应
顺序容器概述如list、forward_list是链式存储结构,而vector、deque、array、string为顺序存储结构,在增删改等操作上它们会有不同的特性
构造函数 默认构造//example1.cpp list拷贝构造m_list;//默认构造函数构造空容器 vector m_vector;
//example1.cpp vector迭代器范围构造m_vector_copy(m_vector);
其范围是[begin,end)范围内的元素
//example1.cpp vector列表初始化构造m_vector_1(m_vector_copy.begin(), m_vector_copy.end());
//example1.cpp list迭代器m_list_1{1, 2, 3}; for(auto&item:m_list_1){ cout << item << endl;//1 2 3 }
迭代器的范围是[begin,end),当容器为空时begin等于end
//example2.cpp list容器类型成员m_list{1, 2, 3}; list ::iterator iter = m_list.begin(); while(iter!=m_list.end()){ cout << *iter << endl;//1 2 3 iter++; }
每个容器都定义了多个类型,如size_type、iterator、const_iterator
size_type//example3.cpp listiteratorm_list{1, 2, 3}; list ::size_type size = m_list.size(); cout << size << endl;//3
//example3.cpp listconst_iterator::iterator iter = m_list.begin();
//example3.cpp listreference::const_iterator const_iter = m_list.begin(); //*const_iter = 1;//error readonly
元素引用类型
//example3.cpp listconst_reference::reference m_list_reference=*(m_list.begin()); // int &m_list_reference; m_list_reference = 999; cout << *(m_list.begin()) << endl;//999
const引用
//example3.cpp listvalue_type::const_reference m_const_list_reference = *(m_list.begin());//const int &m_const_list_reference //m_const_list_reference = 888; //error:: readonly
容器存储类型的值类型
//example3.cpp listpointer::value_type num = 9;//int num
容器存储类型的指针类型
//example3.cpp listconst_pointer::pointer ptr;//int *ptr
容器存储类型const指针类型
//example3.cpp listdifference_type::const_pointer const_ptr;//const int *const_ptr
迭代器之间的距离
//example3.cpp vectorbegin和end成员vec = {1, 2, 3}; vector ::difference_type distance=end(vec) - begin(vec); cout << distance << endl;//3
我们以前接触到的begin和end,分别指向第一个元素与最后一个元素的下一个位置,begin和end有多个版本
r开头的返回反向迭代器,c开头的返回const迭代器
//example4.cpp vectorcbegin和cendvec = {1, 2, 3, 4}; vector ::reverse_iterator iter = vec.rbegin(); while(iter!=vec.rend()){ cout << *iter << endl;//4 3 2 1 iter++; }
//example4.cpp vectorcrbegin和crend::const_iterator const_iter = vec.cbegin(); //*const_iter = 999;
甚至还有这样的组合,真实离了个大谱了
//example4.cpp vector::const_reverse_iterator const_reverse_iter = vec.crbegin(); while (const_reverse_iter!=vec.crend()) { cout << *const_reverse_iter << endl;//4 3 2 1 const_reverse_iter++; }



