有关C++容器的介绍(第1篇---概览与Vector容器)

     近期,我学习了有关C++及其STL容器的有关知识,在此做了做总结。今天我先简要介绍一下什么是“容器”,有什么作用,以及vector容器的基本用法。我是一名初学者,或许只能浅显的介绍一些容器的基本成员函数的用法,并配上例子,不作原理的剖析。

目录

  • 什么是C++容器,有什么作用?
  • 有哪些C++的STL容器
  • vector的简介及常用函数
  • 代码示例

一、什么是C++容器,有什么作用?

    所谓“容器”,顾名思义,就是一个模板或一种“介质”,用于存放各种类型的数据,如基本类型的变量或者对象等。容器大大方便了我们处理各种数据结构,而且它最重要的优点就是可以自己扩展自己的大小,这是普通的数组无法做到的。

    谈到C++容器,就不可避免地要介绍STL:何为STL?STL是C++标准模板库(Standard Template Library),是目前C++内置支持的库,它的底层利用了C++类模板和函数模板的机制。STL是C++语言标准库之一,C++标准库还包括C语言标准库,IO流库,本地化库和其他。而容器又是STL的重要组成部分,STL包括容器 container,算法 algorthm,迭代器 iterator,仿函数 function object,适配器 adaptor,空间配置器 allocator等六大组件。


二、常见的STL容器

  • 顺序容器:

         vector 向量
         deque 双端队列
         list 链表
         string 字符串

  • 关联容器:

         set 集合
         multiset 多重集合
         map 映射
         multimap 多重映射
         pair类型

  • 适配器容器:

         stack 栈容器
         queue 队列容器
         priority_queue 优先级队列容器


三、Vector的简介及基本用法

Vector是向量容器,可以将元素放到动态数组中加以管理。它能从末尾快速地插入与删除元素,支持快速的随机访问元素,也就是说可以通过变址运算符[ ]或at函数访问向量中的任意元素,vector是所有容器中比较灵活的一种。特点:地址不变,内存空间连续,所以在中间进行插入和删除时会造成内存块拷贝,如果插入的是结构体或者类,则会造成构造和析构,性能不是特别高,对结尾元素操作最快。

 1.初始化

 在C++中使用Vector,应先导入vector库,使用标准命名空间。即:

#include<vector>
using namespace std;

  创建向量的示例:

vector<int>a0;          //创建空向量a0
vector<int>a1(5);       //a1有5个元素,每个数的值都是默认值为0
vector<int>a2(7,2);     //a2有7个元素,每个数的值都是2
vector<int>a3{6};       //a3有1个元素6
vector<int>a4(a0.begin(), a0.begin()+5);//利用a0的迭代器创建向量a4
vector<int>a5=a6;       //或vector<int>a5(a6);创建a5,并将a6中的值拷贝到a5

    一般还可以用assign()函数为向量赋值,assign()函数有一下3种用法:

assign(Iter1,Iter2)由现有向量的两个迭代器截取值,并赋值给新向量
assign(n,val)以n个值val赋值给新向量
assign(array)以一个数组赋值给新向量

  2.元素的添加与删除

push_back(elem)在向量末尾添加元素elem(进栈)
pop_back()删除最后一个元素(出栈)
erase(iter)或erase(iter1,iter2)删除向量中某个迭代器或者迭代器区间中的元素
insert(pos,elem)在pos位置插入元素elem
clear()清空向量中所有元素

代码示例:

#include<bits/stdc++.h>
#include<vector>
using namespace std;
int main()
{
    vector<int>a;
    vector<int>::iterator q;//创建迭代器
    for(int y=1;y<=5;++y)
    {
        a.push_back(y);
    }
    //此时a为{1,2,3,4,5}
    a.pop_back();
    //此时a为{1,2,3,4}
    a.erase(a.begin()+1);
    //a为{1,3,4}
    a.insert(a.begin()+1,2);
    //a为{1,2,3,4}
    return 0;
}

 3.迭代器与元素的访问,遍历

[ ]运算符使用[ ]运算符可访问任意成员,一般不会抛出异常
at(index)访问索引为index的成员,会抛出越界异常
vector<int>::iterator Iter创建迭代器Iter(迭代器就是一种特殊的指针)
begin()返回首元素迭代器
end()返回尾元素后一个位置的迭代器
rbegin()返回首元素的逆迭代器
rend()返回尾元素的逆迭代器
front()获取当前向量容器的第一个元素
back()获取当前向量容器的最后一个元素

    代码示例:

#include<bits/stdc++.h>
#include<vector>
using namespace std;
int main()
{
    vector<int>a;
    vector<int>::iterator q;//创建迭代器
    for(int y=1;y<=5;++y)
    {
        a.push_back(y);
    }
    //此时a为{1,2,3,4,5}
    printf("%d\n",a.front());//1
    printf("%d\n",a.back());//5
    printf("%d\n",a.at(1));//2
    printf("%d\n",a[2]);//3
    for(q=a.begin();q<a.end();++q)
    {
        printf("-%d",*q);
    }
    //-1-2-3-4-5
    return 0;
}

  4.有关容量与数量的函数

empty()判断当前向量容器是否为空
size()返回当前向量容器中的实际元素个数
capacity()返回在重新进行内存分配以前所能容纳的元素个数
resize(n)调整当前向量容器的大小,使其能容纳n个元素
reserve(n)为当前向量预分配n个元素的存储空间
max_size()返回向量可储存的最多元素个数(上限)

C++容器方面的知识可能比较复杂,但不难理解,我相信只要认真学习,多写代码多试验,就一定能掌握它!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Duyu09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值