C++线性序列容器<vector>简单总结

C++线性序列容器<vector>简单总结

vector是一个长度可变的数组,使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加;Vector类提供额外的方法来增加、删除元素,比数组操作高效。

头文件:#include <vector>

命名空间:using namespace std:vector

构造函数

vector<int>vec_int;         // 创建一个整形元素的vector

vector<string>vec_string;    // 创建一个string元素的vector

vector<Mystruct>vec_Mystruct;   // 创建一个元素是结构的vector

基本维护操作

1.访问

下标访问和at()两种方式,推荐第二种方法,它会进行边界检查。

vec_int[1], vec_int.at(1);    // 访问索引为1的元素,第2个元素

int size() const;                    // 返回向量中的元素个数

bool empty() const;              // 判断向量是否为空,true为空,false为不空

reference back( );                 // 返回向量的最后一个元素的引用,可以被修改

reference front( );                // 返回向量的第一个元素的引用,可以被修改

2.添加

void push_back(const T& Val); ;  // 在vector末尾处添加一个元素。

3.删除

void pop_back( );        // 删除向量末尾处的元素。

void clear();                // 清除向量中的所有元素

4.插入

void insert(iterator it, int count, T& value);  // 在迭代器的位置插入指定count数量的value值,count参数可选,默认为1

5.遍历

常用的使用迭代器遍历,也非常方便;

iterator begin();           // 返回向量的第一个元素的迭代器

iterator end( );            // 返回向量的最后一个元素的迭代器

遍历方法:

for (vector<int>::iterator vec_it = vec_int.begin(); vec_it != vec_int.end(); vec_it++)
{
    cout << *vec_it << endl;
}

成员函数

assign

清除矢量并将指定的元素复制到该空矢量。
at 返回对矢量中指定位置的元素的引用。
back 返回对向量中最后一个元素的引用。
begin 对该向量中第一个元素返回随机访问迭代器。
capacity 返回在不分配更多的存储的情况下向量可以包含的元素数。
cbegin 返回指向向量中第一个元素的随机访问常量迭代器。
cend 返回一个随机访问常量迭代器,它指向刚超过矢量末尾的位置。
crbegin 返回一个指向反向矢量中第一个元素的常量迭代器。
crend 返回一个指向反向矢量末尾的常量迭代器。
clear 清除向量的元素。
data 返回指向向量中第一个元素的指针。
emplace 将就地构造的元素插入到指定位置的向量中。
emplace_back 将一个就地构造的元素添加到向量末尾。
empty 测试矢量容器是否为空。
end 返回指向矢量末尾的随机访问迭代器。
erase 从指定位置删除向量中的一个元素或一系列元素。
front 返回对向量中第一个元素的引用。
get_allocator 将对象返回到矢量使用的 allocator 类。
insert 将一个元素或多个元素插入到指定位置的向量中。
max_size 返回向量的最大长度。
pop_back 删除矢量末尾处的元素。
push_back 在矢量末尾处添加一个元素。
rbegin 返回指向反向向量中第一个元素的迭代器。
rend 返回一个指向反向矢量末尾的迭代器。
reserve 保留向量对象的最小存储长度。
resize 为矢量指定新的大小。
shrink_to_fit 放弃额外容量。
size 返回vector元素个数
swap 交换两个向量的元素。
时间: 2024-10-27 05:36:41

C++线性序列容器<vector>简单总结的相关文章

SGI-STL简记(六)-序列容器(vector)

stl_vector.h : vector:可随机访问元素的序列容器,从后插入或删除在常量时间内完成,从首部或中间则需线性时间内完成: _Vector_alloc_base:vector分配基类模板:模板参数分别为数据类型T,分配器类型_Allocator,以及一个bool标识_IsStatic(用于区分是否为标准分配器或SGI分配器); 数据成员: _M_data_allocator:分配器对象; _M_start:保存申请的缓冲区首地址(等同于容器元素的首地址): _M_finish:保存容

C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用

序列性容器::(vector和list和deque) erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被 删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方 式,但是erase的返回值为下一个有效的迭代器,所以   正确方法为:: for( iter = c.begin(); iter != c.end(); ) iter = c.erase(iter); 关联性容器::(map和set比较常用) erase迭代器只是被删元素的迭代器失效,但是返回值为void, 所

SGI-STL简记(六)-序列容器(list)

stl_list.h : list:一个可从任意位置快速插入和删除元素的双向链表,可在常数时间内完成,但是取数据.查找等则需要线性时间: _List_node_base:链表节点基类struct,仅包含_M_next._M_prev成员,其分别为指向当前节点基类类型的下一个.上一个节点的指针: _List_node:节点模板类,继承于_List_node_base,只是增加了一个数据成员_M_data,用以保存实际的node节点数据: _List_iterator_base:链表迭代器基类,所属

string基本字符序列容器

C语言每天提供专门的字符串类型,需要通过字符数组才能对字符串进行存储和处理.在标准C++中,字符串类由C++ STL实现.string是一个基于字符的序列容器,具有vector向量一样的内部线性结构,字符逐一写入容器,最后以null字符结尾.跟传统的char*字符数组相比,string提供了丰富的函数用于字符的添加.删除.替换.查找和比较等. 创建string对象 主要有以下几种方式. (1)    string() string s; (2)    string(conststring&s,s

SGI-STL简记(六)-序列容器(deque)

stl_deque.h : deque:一种具有双端插入和删除,可随机访问元素的容器,从首部或后插入或删除在常量时间内完成,从中间则需线性时间内完成: __deque_buf_size:获取队列节点缓冲区大小(工具函数),当数据元素类型字节size小于512时则为512/size,否则为1,(意味着节点容器上限为512字节或者是一个自定义类型元素大小的字节): _Deque_iterator:专用于deque容器的迭代器模板类:重声明常规类型以及迭代器类型和常量迭代器类型,迭代器分类为rando

STL源码剖析—序列容器

对于STL中的容器,存在一定的内含关系,例如,heap内含一个vector,priority-queue内含一个hep,stack和queue都含有一个deque,set/map/multiset/multimap都内含一个RB-tree,hash_x都内含一个hashtable. 对于序列容器来说,vector和list的插入都是在指向迭代器之前进行插入.同时需要注意的就是,对于vector来说,调用erase()函数也就是清除了几个连续空间上的元素,调用其析构函数,并没用释放原来元素占用的内

SSDT-BI之八:序列容器

序列容器说白了就类似于C#Code中的代码块,其作用就是把多个任务放到一个Scope中. 如下图,在Package区域中加入一个序列容器,之后就可以在序列容器中添加任何其他任务: 这个工具比较简单,容易理解,接下来在介绍一下执行流程中的并行与串行.具体概念应该不需要我在详细介绍,因为其他的语言的高阶课程中都有介绍.在BI中对两者的实现比其他编程语言中要来的简单: 1,串行-不同的任务之间使用箭头连接起来组成一个执行序列就是串行. 2,并行-不同的任务之间没有使用箭头连接起来组成的执行单元就是并行

C/C++中容器vector使用方法

C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector!vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和 string 对象一样,标准库将负责管理与存储元素相关的内存.我们把 vector 称为容器,是因为它可以包含其他对象.一个容器中的所有对象都必须是同一种类型的. vector对象的定义和初始化 同样的,使用前,导入头文件#include <vector> 可以使用using声明:using std::vector; vector

C++关联容器&lt;map&gt;简单总结

C++关联容器<map>简单总结 map提供大小可变的关联容器,基于关联键值高效检索元素值.当你处理键值对的数据是,都可以考虑使用map关联容器. 特点: 大小可变的关联容器,基于关联键值高效检索元素值. 可逆,因为它提供双向迭代器来访问其元素. 有序,因为它的元素根据指定的比较函数按键值排序. 唯一. 因为它的每个元素必须具有唯一键. 关联容器对,因为它的元素数据值与其键值不同. 模板类,因为它提供的功能是一般性的功能,与元素或键类型无关. 用于元素和键的数据类型作为类模板以及比较函数和分配