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

C++STL容器篇(一)

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

C++STL容器篇(一)

容器的好处

在编写c/c++的时候很多时候都会使用数组操作数组中的类容;在学习了c++类的小伙伴知道c++的类可以实现非常多的对象;那也可以实现一个数组的对象,有很多小伙伴就要问了为什么要那么麻烦直接创建一个数组不香吗?,对与这个问题我也有过,在使用数组的时候是不是都有那几个操作,增加,删除,赋值;我们每次使用数组时都要写这几个操作,那么有没有办法直接调用函数解决呢,可以但是你的数组种类那么多那要找到一个可处理这种数组的函数也没那么容易;根基类来操作就不会遇到这种问题了因为成员函数是可以根据类对象来改变的;

类可以自己设计也可以使用c++标准库中的,c++中称之为容器:这里给大家介绍俩种常用的先:分别是定长数组类:array;与动态数组类vector;

定长数组:array

头文件:#include

创建方法:

//第一个参数填数组类型,可以是自定义类型;第二个参数是数组的个数;
array arr = {1,2,2};//初始化
	arrayaar;//未初始化

 array类的成员函数(以下信息来微软官方文档)

array构造一个数组对象。
assign(已过时。 使用 fill .) 替换所有元素。
at访问指定位置处的元素。
back访问最后一个元素。
begin指定受控序列的开头。
cbegin返回一个随机访问常量迭代器,它指向数组中的第一个元素。
cend返回一个随机访问常量迭代器,它指向刚超过数组末尾的位置。
crbegin返回一个指向反向数据中第一个元素的常量迭代器。
crend返回一个指向反向数组末尾的常量迭代器。
data获取第一个元素的地址。
empty测试元素是否存在。
end指定受控序列的末尾。
fill将所有元素替换为指定值。
front访问第一个元素。
max_size对元素数进行计数。
rbegin指定反向受控序列的开头。
rend指定反向受控序列的末尾。
size对元素数进行计数。
swap交换两个容器的内容。

 有了这些函数就可以方便的操作数组,不必再去写对应操作的函数;

如果不习惯array还重载了"[ ]"符号以可以通过“[ ]”来访问

例:

arrayaar;
	for (int i=0;i<3;i++)
	{
		aar[i] = i;//使用操作符操作类容
		aar.at(i) = i + 1;//使用成员函数操作类容
	}

也可以使用自定义函数或类

class MM
{
public:
	MM() {};//构造函数
	MM(const char*i):mm(i)//构造函数
	{}
	
protected:
	string mm;
};
int main()
{
	array aar = { "我","是","谁" };//采用类作类型时创建需要对应的构造函数
	arrayeer;
}

  

 动态数组类:  vector

头文件:#include

创建方法:

    vector vve;//未初始化
	vectoryee = { 1,23,4,13,4,34,34 };//初始化

vector类的成员函数(以下信息来微软官方文档)

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返回向量中的元素数量。
swap交换两个向量的元素。

使用自定义类型

class MM
{
public:
	
	MM(const char*i):mm(i)
	{}
	
protected:
	string mm;
};

int main()
{
	vector vve;//初始化创建不需要无参的构造函数
	vectoryee = {" 我","你" };//带初始化创建时需要对应的构造函数
}

 vector与array最大的区别在与vector是可改变数组成员个数的;而array是一开始创建是就规定好了数组个数;

例如vector的成员函数push_back;就可以在vector数组末尾增加一个成员;

array与vector嵌套

array与vecyor嵌套或vecyo与vecyo嵌套,array与array嵌套;来达到多维数组的效果;

例:

    array, 3>, 3>;//array与array嵌套
	vector>>;//vector与vector嵌套
	vector, 4>>;//array与vector嵌套

一般般使用时都是vecyo与vecyo嵌套或array与array嵌套,尽量不要出现array与vecyor嵌套;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665819.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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