C++之STL顺序容器

这篇具有很好参考价值的文章主要介绍了C++之STL顺序容器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、STL容器简介

二、顺序容器


 

一、STL容器简介

STL容器是一个通用的数据结构,可以处理不同数据类型,包含基本的数据结构如链表、堆栈、队列等。可以分为顺序容器、关联容器、 容器适配器、特殊容器。本篇博客将简要介绍一下STL容器中的顺序容器。

二、顺序容器

2.1.特点:

• 元素的添加或插入位置与元素的值无关
• 无自动排序

 2.2分类:

1.向量(动态数组vector)

• 在内存中占有一块连续的空间(动态数组)
• 可自动扩充且提供越界检查
• 适合在向量末尾插入或删除数据
• 可用[]运算符直接存取数据

在定义成员时格式如下:

vector <数据类型> 名称

再利用各指令对创建出的动态数组进行修改。代码如下:

#include<iostream>
#include<vector>//需要引头文件<vector>
using namespace std;
int main() {
	vector<int> v;
    //vector<int> v(6, 1);//这里指数组中存放的是6个1
	for (int i = 0; i < 6; i++)
	{
		v.push_back(i);//尾插
	}
	for (int i = 0; i < (int)v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < 3; i++)
	{
		v.pop_back();//尾删
	}
	for (int i = 0; i < (int)v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	return 0;
}

C++之STL顺序容器

 使用:• 头文件 <vector>
            • 适用于快速存取数据但非频繁插入删除场合

2.迭代器

定义:能对顺序容器或关联容器中的每个元素进行连续存取的对象(一个特殊的指针)。

用法:容器名<数据类型>::iterator 迭代器名;

如:vector <int>::iterator p;/ list <int>::iterator it;

使用:C++之STL顺序容器

标准迭代器的使用:

#include<iostream>
#include<vector>
using namespace std;
int main() {
	vector<int> v;
	for (int i = 0; i < 6; i++)
	{
		v.push_back(i);//尾插
	}
	//标准迭代器的使用
	vector<int>::iterator it;
	for (it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	for (int i = 0; i < 3; i++)
	{
		v.pop_back();//尾删
	}
	for (int i = 0; i < (int)v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	return 0;
}

非标准迭代器的使用:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector <int>v;
	vector <int>::reverse_iterator p;
	for (int i = 0; i < 10; i++)
		v.push_back(i);
	for (p = v.rbegin(); p != v.rend(); p++)
		cout << *p << " ";
	cout << endl;
}

C++之STL顺序容器

3.列表容器(list)

定义:双向链表

• 前驱和后继
• 可在任意位置插入或删除数据
• 不能用[]运算符直接存取数据

使用:

• 头文件 #include <list>
• 适用于数据频繁插入删除的场合
• 适用于不在意查找速度的场合
• 排序sort()、合并merge()操作效率高

 

#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main() 
{
	list<double> first, second;
	first.push_back(3.1);//first数列尾插入三个数
	first.push_back(2.2);
	first.push_back(2.9);
	for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	second.push_back(3.7);//second数列尾插入三个数
	second.push_back(7.1);
	second.push_back(1.4);
	first.sort();//对first进行排序
	for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	second.sort();//对second进行排序
	first.merge(second);//合并两个数列
	for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	second.push_back(2.1);
	first.merge(second);
	for (list<double>::iterator it = first.begin(); it != first.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	return 0;
}

C++之STL顺序容器

 4.双端队列容器(deque)

特点:

• 以多内存块形式存储数据
• 可自动扩充且提供越界检查
• 适合在向量头尾插入或删除数据
• 可用[]运算符直接存取数据

使用:

• 头文件#include <deque>
• 适用于快速在队列头尾存取数据的场合
• 不适用于频繁插入删除的场合
• 若非头尾插入删除则效率低于list

#include <iostream>
#include <deque>
using namespace std;
int main()
{
    deque<double> d;
    deque<double>::iterator it;
    for (int i = 0; i < 5; i++)
    {
        d.push_back(i);
    }
    it = d.begin();
    it++;
    d.insert(it, 30);//在it前面插入30
    for (it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
    return 0;
}

 文章来源地址https://www.toymoban.com/news/detail-434627.html

到了这里,关于C++之STL顺序容器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ STL set容器

    和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等。 举个例子,如下有 2 组键值对数据: {\\\'a\\\', 1, \\\'b\\\', 2, \\\'c\\\', 3} {\\\'a\\\', \\\'a\\\', \\\'b\\\', \\\'b\\\', \\\'c\\\', \\\'c\\\'} 显然,第一组数据中各键值对的键和值不相等,而第二组中各键值对的键和值对应相等。对于 set 容器来

    2024年02月02日
    浏览(41)
  • C++轮子 · STL关联容器

    上一篇文章中我们简单的介绍了一下STL中的序列容器和容器适配器,这篇文章中我们将重点介绍STL中的关联容器(最后四个在概念上应该不是关联容器,但是因为和前面的容器联系太紧密,统一放在这里讲解),主要内容包括: std::set std::map std::multi_map std::multi_set std::unorde

    2024年01月21日
    浏览(37)
  • C++轮子 · STL 序列容器

    STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这篇文章中将会重点介绍STL中的各种序列型容器和相关的容器适配器。主要内容包括 std::vector std::array std::deque std::queue std::stack std::priority_queue std::l

    2024年01月17日
    浏览(42)
  • C++提高编程——STL:string容器、vector容器

    本专栏记录C++学习过程包括C++基础以及数据结构和算法,其中第一部分计划时间一个月,主要跟着黑马视频教程,学习路线如下, 不定时更新,欢迎关注 。 当前章节处于: ---------第1阶段-C++基础入门 ---------第2阶段实战-通讯录管理系统, ---------第3阶段-C++核心编程, -----

    2024年01月23日
    浏览(49)
  • C++ [STL容器反向迭代器]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT 我们知道STL大部分容器都有迭代器,迭代器又分为正向迭代器和反向迭代器,对于正向迭代器以及实现前面我们已经了解了不少,而反向迭代器的设计思想是 适配器模式 ,本节我们介绍反向迭代器的实现! 适配器是把一个类的接

    2024年02月11日
    浏览(58)
  • C++ [STL容器适配器]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT 前面我们介绍了适配器模式中的反向迭代器,反向迭代器通过容器所支持的正向迭代器适配为具有反向迭代功能的迭代器,本节我们介绍STL中另一种适配器: 容器适配器 ! 前面我们提到过STL适配器模式,关于适配器的解释: S

    2024年02月11日
    浏览(44)
  • C++标准库STL容器详解

    容器都是类模板,它们实例化后就成为容器类。用容器类定义的对象称为容器对象。对象或变量插入容器时,实际插入的是对象或变量的一个复制品。 顺序容器 1、元素在容器中的位置同元素的值无关,即容器不是排序的。 2、顺序容器包括:vector、deque、list。 关联容器 1、

    2024年02月10日
    浏览(32)
  • 【C++学习】STL容器——list

    目录 一、list的介绍及使用 1.1 list的介绍  1.2 list的使用 1.2.1 list的构造  1.2.2  list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比 一、list的介绍及使用 1.1 list的介绍 list的文档介绍

    2024年02月14日
    浏览(40)
  • [C++]模板初阶与STL简介

    目录 模板初阶与STL简介::                                         1.泛型编程                                         2.函数模板                                         3.类模板                                         4.什么是STL                  

    2023年04月25日
    浏览(34)
  • C++ —— STL容器【vector】模拟实现

    本章代码gitee仓库:vector模拟实现、vector源码 看源码发现 vector 是类模板定义的,成员是采用迭代器进行管理 当涉及到容器类时,通常有一些关键函数,如构造函数、析构函数和拷贝构造函数,它们负责初始化容器对象、销毁对象和进行对象的拷贝等 这里注意拷贝构造要实现

    2024年02月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包