STL——array和vector容器

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

STL——array和vector容器

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的
📖作者主页:热爱编程的小K
📖专栏链接:c++

🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾

STL——array和vector容器

一、array
1、array概念

array是一个容器,封装了固定大小的数组。

该容器是聚合类型,其语义与C风格数组的结构相同, T [ N ]作为其唯一的非静态数据成员。与c风格数组不同的是,它不会自动衰减为T*。(数组名不会自动转为数组首地址)

该容器将C风格数组的性能可访问性与标准容器的优点相结合,比如知道自己的大小、支持赋值、随机访问迭代器等。

2、操作基本数据类型

初始化不赋初值,里面的值不会自动初始化,因为rray没有构造函数,也没有私有或保护成员,所以不初始化读出来的是野值

void testOne()
{
    array<int, 5> pos;
    for (int i = 0; i < pos.size(); i++)
    {
        cin >> pos[i];
    }
    for (int i = 0; i < pos.size(); i++)
    {
        /* code */
        cout << pos[i] << " ";
    }
    cout << endl;
    array<double, 3> nums = { 1.11,2.22,3.33 };
    //迭代器方式访问
    for (array<double, 3>::iterator iter = nums.begin(); iter != nums.end(); iter++)
    {
        cout << *iter << " ";
    }
    cout << endl;
    //新版for循环方式访问
    for (auto v : nums)
    {
        cout << v << " ";
    }
    cout << endl;
}
3、操作自定义类型

操作自定义类型时要记得重载运算符

class MM
{
public:
    MM(int age = 0, string name = "") :age(age), name(name) {}
    friend ostream& operator<<(ostream& out, const MM& object)
    {
        out << object.name << " " << object.age << endl;
        return out;
    }
    string getName() const { return name; }
    int getAge() const { return age; }
protected:
    int age;
    string name;
};
bool seacherName(const MM& object) {
    return object.getName() == "貂蝉";
}
void testtwo() {
    array<MM, 3> info;
    info[0] = { 18,"貂蝉" };
    info[1] = { 19,"杨玉环" };
    info[2] = { 16,"坤坤" };
    for (auto v : info)
    {
        cout << v << endl;
    }
    array<MM, 3>::iterator iter = find_if(info.begin(), info.end(), seacherName);
    if (iter != info.end()) 
    {
        cout << (*iter).getName() << " " << iter->getAge() << endl;
    }
}
4、函数介绍
函数名 作用
size() 读取数组大小
empty() 判断数组是否为空
front() 读取数组首元素
back() 读取数组末尾元素
fill() 用某元素填充数组
void test3() {
    array<int, 5> king = { 1,2,3,4,5 };
    cout << "size:" << king.size() << endl;
    cout << "empty:" << king.empty() << endl;
    cout << "front" << king.front() << endl;
    cout << "back:" << king.back() << endl;
    cout << "填充:";
    king.fill(5);
    for (int i = 0; i < 5; i++)
        cout << king[i] << " ";
}
二、vector
1、Vector概念

vector 容器是 STL 中最常用的容器之一,它和 array 容器非常类似,都可以看做是对 C++普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。

vector尾部添加或移除元素非常快速。但是在中部或头部插入元素或移除元素比较费时

2、操作基本类型

注意:成员函数push_back()是在容器的最后面插入,如图,原先建立的时候是3个空间,用成员函数插入一个,空间变成4个,以及最后又在后面插入了一个999

STL——array和vector容器

//操作基本数据类型
bool cmpData(int data) { return data == 888; }
void testOne() 
{
	//不带长度的构建方式,不能采用下标法插入,只能采用成员函数插入
	vector<int> king;
	//king[0] = 1;
	king.push_back(1);
	king.push_back(2);
	king.push_back(3);
	for (int i = 0; i < king.size(); i++)
	{
		cout << king[i] << " ";
	}
	cout << endl;
	for (auto v : king) {
		cout << v << " ";
	}
	cout << endl;
	for (vector<int>::iterator iter = king.begin(); iter != king.end(); iter++) {
		cout << *iter << " ";
	}
	cout << endl;

	vector<int> info(3);
	info.push_back(888);
	for (int i = 0; i < info.size()-1; i++)
	{
		cin >> info[i];
	}
	info.push_back(999);
	for(auto v:info)
	{
		cout << v << " ";
	}
	cout << endl;
	vector<int>::iterator iter = find_if(info.begin(), info.end(), cmpData);
	if (iter != info.end()) cout << *iter << endl;
}
3、操作自定义类型

STL——array和vector容器

这里用迭代器进行删除的时候,成员函数erase()会把删除的下一个位置返回回来

//操作自定义数据类型
class MM
{
public:
	MM(int age=0,string name=" "):age(age),name(name){}
	friend ostream& operator<<(ostream& out, const MM& object) {
		out << object.name << " " << object.age << endl; \
			return out;
	}
	string getName() { return name; }
	int getAge() { return age; }
protected:
	int age;
	string name;
};
void testTwo() {
	vector<MM> info;
	info.push_back(MM(19, "西施"));
	info.push_back(MM(18, "貂蝉"));
	info.push_back(MM(20, "妲己"));
	for (auto v : info) {
		cout << v;
	}
	cout << endl;
	for (vector<MM>::iterator iter = info.begin(); iter != info.end();) {
		if (iter->getName() == "妲己") {
			iter = info.erase(iter);
		}
		else
		{
			iter++;
		}
	}
	for (auto v : info) {
		cout << v;
	}
}
三、vector和array的嵌套
1、array嵌套

STL——array和vector容器

void testOne() 
{
	//nums[4][3]
	array<array<int, 4>, 3> nums;
	for (int i = 0; i < nums.size(); i++)
	{
		for (int j = 0; j < nums[i].size(); j++) {
			nums[i][j] = i * nums.size() + j;
		}
	}
	for (auto v:nums )
	{
		for (auto m : v) {
			cout << m << " ";
		}
		cout << endl;
	}
}
2、vector嵌套

STL——array和vector容器文章来源地址https://www.toymoban.com/news/detail-415392.html

void testTwo() {
	vector<vector<int>> info;
	for (int i = 0; i <=3; i++)
	{
		vector<int> temp;
		for (int j = 0; j <= i; j++) 
		{
			temp.push_back(j);
		}
		info.push_back(temp);
	}
	for (auto v : info) {
		for (auto m : v) {
			cout << m << " ";
		}
		cout << endl;
	}
}

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

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

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

相关文章

  • C++ —— STL容器【vector】模拟实现

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

    2024年02月16日
    浏览(30)
  • C++STL:顺序容器之vector

    vector 容器是 STL 中最常用的容器之一,它和 array 容器非常类似,都可以看做是对 C++ 普通数组的“升级版”。不同之处在于,array 实现的是静态数组(容量固定的数组),而 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的

    2024年02月13日
    浏览(27)
  • 【C++STL】模拟实现vector容器

    本文带你进入vector的模拟实现,对于vector,是我们深入学习STL的必要途径。 根据库的实现方式,成员函数如下: c++11开始可以对成员变量使用缺省值,在这里我们可以使用缺省值。 size的大小为_finish - _start capacity的大小为_end_of_storage - _start 该函数的作用是:扩容。 思路:

    2024年02月16日
    浏览(27)
  • 【C++STL】“vector“容器的模拟实现

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:C++初阶 🎉代码仓库:小智的代码仓库 这里的 iterator 是 typedef T* iterator; 定义来的, T 是模板参数。 _start 是指向开始的指针变量。 _finish 是指向最后一个元素的下一位的指针变量。 _endofstorage 是

    2024年02月16日
    浏览(33)
  • C++ stl容器vector的底层模拟实现

    目录 前言:   1.成员变量,容量与大小 2.构造函数 无参构造: 带参的使用值进行构造:  使用迭代器区间进行构造: 3.交换 4.拷贝构造 5.赋值重载 6.迭代器 7.扩容 reserve: resize: 8.插入与删除 insert: erase: insert迭代器失效问题: erase迭代器失效问题: 9.头插头删 10.[]重载

    2024年04月15日
    浏览(29)
  • STL之vector容器的介绍与模拟实现

    所属专栏:C“嘎嘎\\\" 系统学习❤️ 🚀 博主首页:初阳785❤️ 🚀 代码托管:chuyang785❤️ 🚀 感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️ 🚀 博主也会更加的努力,创作出更优质的博文!!❤️ vector的文档介绍 vector是表示可变大小数组的序列容器。 就像

    2024年01月21日
    浏览(31)
  • STL标准模板库 vector容器与迭代器入门

    vector 就是一个连续的数据 C++11 std::vector a ={1,4,2,6,7}; 可以使用花括号来定义 容器的功能就是存储数据 迭代器的功能就是指向数据,并且可以实现前后移动(指针)算法和容器的接口的存在 vector功能是长度可变的数组, 身在栈上 里面的数据存储在堆上 因为栈不可动态扩容

    2023年04月23日
    浏览(32)
  • 【C++入门】STL容器--vector底层数据结构剖析

    目录  前言  1. vector的使用       vector的构造  vector迭代器  vector空间相关的接口  vector 功能型接口  find  swap  insert  erase 2. vector内部数据结构剖析 reserve  push_back和pop_back size、capacity、empty、operator[ ];  insert和erase resize swap  拷贝构造和赋值重载 构造函数补充  迭代器

    2024年01月25日
    浏览(36)
  • 【C++】:C++中的STL序列式容器vector源码剖析

    vector定于与stl_vector.h头文件中 例如: vector的数据结构非常简单:一个线性连续空间 下面介绍vector的3个数据结构: start:表示目前使用空间的头 finish:表示目前使用空间的尾 end_of_storage:表示目前可用空间的尾 说明:为了降低空间配置时的速度成本,vector实际配置的大小可

    2024年01月22日
    浏览(35)
  • 【C++】:STL源码剖析之vector类容器的底层模拟实现

    构造一个空vector size和capacity为0 将_start _finish _endofstorage 都置为空指针即可 传统写法 : 1). 新开辟一块和 v 同样容量的空间,更新 _start, _finish, _endofstorage 2). 将 v 中的数据拷贝到新开辟的空间中 注意 : 不要使用memcpy函数拷贝数据,如果数据是内置类型或浅拷贝的自定义类型

    2024年02月04日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包