STL——array和vector容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的📖作者主页:热爱编程的小K📖专栏链接:c++🎉欢迎各位→点赞👏 + 收藏💞 + 留言🔔​💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🐾————————————————版权声明:本文为CSDN博主「热爱编程的小K」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_72157449

目录文章

一、array

1、array概念

2、操作基本数据类型

3、操作自定义类型

4、函数介绍

二、vector

1、Vector概念

2、操作基本类型

3、操作自定义类型

三、vector和array的嵌套

1、array嵌套

2、vector嵌套

一、array

1、array概念

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


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


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

void testOne()

{

   array 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 nums = { 1.11,2.22,3.33 };

   //迭代器方式访问

   for (array::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 info;

   info[0] = { 18,"貂蝉" };

   info[1] = { 19,"杨玉环" };

   info[2] = { 16,"坤坤" };

   for (auto v : info)

   {

       cout << v << endl;

   }

   array::iterator iter = find_if(info.begin(), info.end(), seacherName);

   if (iter != info.end())

   {

       cout << (*iter).getName() << " " << iter->getAge() << endl;

   }

}


4、函数介绍

微信截图_20230425222815.png

void test3() {

   array 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

微信截图_20230425223044.png

//操作基本数据类型

bool cmpData(int data) { return data == 888; }

void testOne()

{

//不带长度的构建方式,不能采用下标法插入,只能采用成员函数插入

vector 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::iterator iter = king.begin(); iter != king.end(); iter++) {

 cout << *iter << " ";

}

cout << endl;


vector 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::iterator iter = find_if(info.begin(), info.end(), cmpData);

if (iter != info.end()) cout << *iter << endl;

}


3.操作自定义类型微信截图_20230425223141.png


这里用迭代器进行删除的时候,成员函数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 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::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嵌套

微信截图_20230425223349.png

void testOne()

{

//nums[4][3]

array, 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嵌套

微信截图_20230425223459.png

void testTwo() {

vector> info;

for (int i = 0; i <=3; i++)

{

 vector 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;

}

}


原文链接:https://blog.csdn.net/qq_72157449/article/details/130181830
相关文章
|
5天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
5天前
|
存储 C++ 容器
【C++】vector容器初步模拟
我们初步完成了对vector 的模拟实现,但是依然有问题,比如不支持string等特殊类型。所以下一篇文章我们来一起完善一下。
15 0
【C++】vector容器初步模拟
|
5天前
|
存储 设计模式 算法
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
16 1
|
5天前
|
存储 算法 C++
详解C++中的STL(标准模板库)容器
【4月更文挑战第30天】C++ STL容器包括序列容器(如`vector`、`list`、`deque`、`forward_list`、`array`和`string`)、关联容器(如`set`、`multiset`、`map`和`multimap`)和容器适配器(如`stack`、`queue`和`priority_queue`)。它们为动态数组、链表、栈、队列、集合和映射等数据结构提供了高效实现。选择合适的容器类型可优化性能,满足不同编程需求。
|
5天前
|
C++ 容器
STL—map容器
STL—map容器
|
5天前
|
存储 算法 程序员
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
C++从入门到精通:2.2.1标准库与STL容器算法深度解析
|
5天前
|
C++ 容器
约瑟夫经典问题C++,STL容器queue解法
约瑟夫经典问题C++,STL容器queue解法
14 0
|
5天前
|
存储 C语言 C++
C++中STL常用容器(vector、deque、list、map、set)一文带你了解
C++中STL常用容器(vector、deque、list、map、set)一文带你了解
|
5天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
17小时前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第20天】 在微服务架构日益普及的今天,Docker作为其重要的实现技术之一,承载着大量应用的运行。然而,随之而来的是对于容器健康状态、资源使用情况以及性能指标的监控需求急剧增加。本文旨在探讨构建一个高效且稳定的Docker容器监控体系,不仅涵盖了监控工具的选择与配置,还详细阐述了监控数据的分析与处理流程。通过精心设计的监控策略和实时响应机制,我们能够确保系统的稳定性,并及时发现及处理潜在的问题。