顺序容器C++

Posted atohome

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序容器C++相关的知识,希望对你有一定的参考价值。

第9章 顺序容器

顺序容器为开发者提供了控制元素存储和访问顺序的能力,顺序不依赖元素的值,而是元素加入元素容器时的位置相对应

顺序容器概述

如list、forward_list是链式存储结构,而vector、deque、array、string为顺序存储结构,在增删改等操作上它们会有不同的特性

构造函数

默认构造

//example1.cpp
list<int> m_list;//默认构造函数构造空容器
vector<int> m_vector;

拷贝构造

//example1.cpp
vector<int> m_vector_copy(m_vector);

迭代器范围构造

其范围是[begin,end)范围内的元素

//example1.cpp
vector<int> m_vector_1(m_vector_copy.begin(), m_vector_copy.end());

列表初始化构造

//example1.cpp
list<int> m_list_11, 2, 3;
for(auto&item:m_list_1)
    cout << item << endl;//1 2 3

迭代器

迭代器的范围是[begin,end),当容器为空时begin等于end

//example2.cpp
list<int> m_list1, 2, 3;
list<int>::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
list<int> m_list1, 2, 3;
list<int>::size_type size = m_list.size();
cout << size << endl;//3

iterator

//example3.cpp
list<int>::iterator iter = m_list.begin();

const_iterator

//example3.cpp
list<int>::const_iterator const_iter = m_list.begin();
//*const_iter = 1;//error readonly

reference

元素引用类型

//example3.cpp
list<int>::reference m_list_reference=*(m_list.begin()); // int &m_list_reference;
m_list_reference = 999;
cout << *(m_list.begin()) << endl;//999

const_reference

const引用

//example3.cpp
list<int>::const_reference m_const_list_reference = *(m_list.begin());//const int &m_const_list_reference
//m_const_list_reference = 888;
//error:: readonly

value_type

容器存储类型的值类型

//example3.cpp
list<int>::value_type num = 9;//int num

pointer

容器存储类型的指针类型

//example3.cpp
list<int>::pointer ptr;//int *ptr

const_pointer

容器存储类型const指针类型

//example3.cpp
list<int>::const_pointer const_ptr;//const int *const_ptr

difference_type

迭代器之间的距离

//example3.cpp
vector<int> vec = 1, 2, 3;
vector<int>::difference_type distance=end(vec) - begin(vec);
cout << distance << endl;//3

begin和end成员

我们以前接触到的begin和end,分别指向第一个元素与最后一个元素的下一个位置,begin和end有多个版本
r开头的返回反向迭代器,c开头的返回const迭代器

reverse_iterator与rend与rbegin

//example4.cpp
vector<int> vec = 1, 2, 3, 4;
vector<int>::reverse_iterator iter = vec.rbegin();
while(iter!=vec.rend())
    cout << *iter << endl;//4 3 2 1
    iter++;

cbegin和cend

//example4.cpp
vector<int>::const_iterator const_iter = vec.cbegin();
//*const_iter = 999;

crbegin和crend

甚至还有这样的组合,真实离了个大谱了

//example4.cpp
vector<int>::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++;

以上是关于顺序容器C++的主要内容,如果未能解决你的问题,请参考以下文章

C++提高编程C++全栈体系(二十七)

C++ std :: fill()函数

容器迭代器

c++顺序容器

C++中list的用法总结

C++顺序容器知识总结