栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

第9章 顺序容器【C++】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第9章 顺序容器【C++】

第9章 顺序容器

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

顺序容器概述

如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
list m_list{1, 2, 3};
list::size_type size = m_list.size();
cout << size << endl;//3
iterator
//example3.cpp
list::iterator iter = m_list.begin();
const_iterator
//example3.cpp
list::const_iterator const_iter = m_list.begin();
//*const_iter = 1;//error readonly
reference

元素引用类型

//example3.cpp
list::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::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::value_type num = 9;//int num
pointer

容器存储类型的指针类型

//example3.cpp
list::pointer ptr;//int *ptr
const_pointer

容器存储类型const指针类型

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

迭代器之间的距离

//example3.cpp
vector vec = {1, 2, 3};
vector::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 vec = {1, 2, 3, 4};
vector::reverse_iterator iter = vec.rbegin();
while(iter!=vec.rend()){
    cout << *iter << endl;//4 3 2 1
    iter++;
}
cbegin和cend
//example4.cpp
vector::const_iterator const_iter = vec.cbegin();
//*const_iter = 999;
crbegin和crend

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

//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++;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931487.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号