首页 > 编程语言 >C++提高编程—2、STL—基础知识以及Vector容器的数据插入和遍历

C++提高编程—2、STL—基础知识以及Vector容器的数据插入和遍历

时间:2024-07-29 20:24:18浏览次数:19  
标签:容器 vector STL back C++ Person Vector push include

2.1 STL的诞生

2.2 STL的基本概念

2.3 STL的六大组件

2.4 STL中容器、算法、迭代器

2.5 容器算法迭代器初识

2.5.1 vector存放内置数据类型

#include <iostream>
using namespace std;
#include<vector>
#include<algorithm>  //标志算法头文件

//vector容器存放内置数据类型

void myPrint(int val)
{
	cout << val << endl;
}

void test01()
{
	//创建一个Vector容器,数组
	vector<int>v;

	//向容器中插入数据
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);

	第一种遍历方式
	通过迭代器访问容器中的数据
	//vector<int>::iterator itBegin = v.begin();  //起始迭代器  指向容器中的第一个元素
	//vector<int>::iterator itEnd = v.end();  //结束迭代器  指向容器中的最后一个元素的下一个
	//while (itBegin != itEnd)
	//{
	//	cout << *itBegin << endl;
	//	itBegin++;
	//}
	第二种方式
	//for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
	//{
	//	cout << *it << endl;
	//}
	//第三种遍历方式 利用STL提供遍历算法
	for_each(v.begin(), v.end(), myPrint);  //回调打印
}
int main()
{
	test01();
	system("pause");
	return 0;
}

2.5.2 Vector存放自定义数据类型 

#include <iostream>
using namespace std;
#include<vector>
#include<string>
#include<algorithm>

//vector容器存放自定义数据类型

class Person
{
public:
	Person(string name, int age)
	{
		this->m_name = name;
		this->m_age = age;
	}

	string m_name;
	int m_age;
};

void test01()
{
	//创建一个Vector容器,数组
	vector<Person>v;
	//赋值
	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	Person p5("eee", 50);
	//向容器中插入数据
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);
	v.push_back(p5);
	
	
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << "姓名" << it->m_name << "年龄" << it->m_age << endl;

		//cout << "姓名" << (*it).m_name << "年龄" <<  (*it).m_age << endl;   //it是指向Person类型的指针,取出Person,再取姓名年龄
	}
}
//存放自定义类型  指针
void test02()
{
	//创建一个Vector容器,数组
	vector<Person*>v;
	//赋值
	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	Person p5("eee", 50);
	//向容器中插入数据
	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	v.push_back(&p4);
	v.push_back(&p5);

	//遍历容器
	for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << (*it)->m_name << "年龄" <<(*it)->m_age<< endl;
	}
}
int main()
{
	test02();
	system("pause");
	return 0;
}

 

 2.5.3 Vector容器嵌套容器

 示例代码如下:

#include <iostream>
using namespace std;
#include<vector>
#include<string>
#include<algorithm>

//vector容器嵌套容器

void test01()
{
	//相当于一个二维数组
	vector<vector<int>>v;
	vector<int>v1;
	vector<int>v2;
	vector<int>v3;
	vector<int>v4;
	for (int i = 0; i < 4; i++)
	{
		//向容器中插入数据
		v1.push_back(i+1);
		v2.push_back(i+2);
		v3.push_back(i+3);
		v4.push_back(i+4);
	}
	
	//将小容器插入到大容器中
	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);

	//通过大容器把所有数据遍历一遍
	for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)
	{
		//*it指的是大括号里面的内容,指向vector<int>,因此下面还要进行遍历
		for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++)
		{
			cout  << *vit<<" ";
		}
		cout << endl;
	}
}

int main()
{
	test01();
	system("pause");
	return 0;
}

标签:容器,vector,STL,back,C++,Person,Vector,push,include
From: https://blog.csdn.net/qq_56896418/article/details/140770184

相关文章

  • 【C++11】C++11新纪元:深入探索右值引用与移动语义
    ......
  • C++ 【元编程】检查类型是否具有成员 hasattr
    在python中,可以使用hasattr判断类型是否具有某个成员。在C++中,有的时候我们要写一个模板函数,需要对模板进行一定的限制时。这些限制可能为“该模板函数仅用于拥有某个成员的类型”。在标准<type_traits>中,规定了一些列如is_copy_assignable等模板常量,用于判断是否拥有拷贝构造......
  • c/c++ 《仿函数》
    4STL-函数对象4.1函数对象4.1.1函数对象概念概念:重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数4.1.2函数对象使用特点:函数对象在使用时,可以像普通函数那样调用,可以......
  • 【C++】利用Eigen库实现弹道计算,并输出弹道轨迹
    利用Eigen库实现弹道计算,并输出弹道轨迹代码弹道知识简介:**弹道导弹**是指在火箭发动机推力作用下按预定程序飞行,关机后按自由抛物体轨迹飞行的导弹。其飞行弹道一般分为主动段和被动段:主动段(又称动力飞行段或助推段)是导弹在火箭发动机推力和制导系统作用下,从发射点......
  • LeetCode之vector
    目录前言1.杨辉三角2.删除有序数组的重复项3.只出现一次的数字Ⅲ只出现一次的数字Ⅱ数组中出现次数超过一半的数字补充讲解sort()前言本篇是对vector的一个巩固练习,题目分别在leetcode和牛客网博客主页:酷酷学!!!感谢关注~正文开始1.杨辉三角题目思路......
  • 【C++的剃刀】我不允许你还不会AVL树
    ​ 学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客Hello,这里是kiki,今天继续更新C++部分,我们继续来扩充我们的知识面,我希望能努力把抽象繁多的知识讲的生动又通俗易懂,今天要讲的是C++AVL树~目录 循环渐进Forward-CSDN博客AVL树的......
  • 如何获取文件缩略图(C#和C++实现)
    在C++中,可以有以下两种办法使用COM接口IThumbnailCache文档链接:IThumbnailCache(thumbcache.h)-Win32apps|MicrosoftLearn示例代码如下:VOIDGetFileThumbnail(PCWSTRpath){HRESULThr=CoInitialize(nullptr);IShellItem*item=nullptr;hr=......
  • 使用 pgvector 和 Lambda 生成基岩嵌入并存储在 Aurora 中
    我在Aurora中的不同表中有一些数据,我想对其执行RAG。为此,我创建了一个微服务(Lambda),它可以生成不同表的嵌入并将该数据存储在Aurora中。但是矢量更新插入应该基于某些数据库流集合。例如:如果有5个以上的数据库更新,那么我应该重新生成嵌入,并且应该有一个端点,我可以在其中......
  • 编译期new,constexpr虚函数,C++
    标准:C++20环境:VSCodeg++13.2C++20新特性,constexpr虚函数,编译期new表达式,可以在编译期实现多态。示例代码://这段仅仅示例编译期new。structA{constexprA(){p=newint(6);}constexpr~A(){deletep;}constexprautoget()co......
  • Socket通信(C++)
    文章目录什么是SocketSocket通信过程C++Socket通信APIintsocket(intdomain,inttype,intprotocol);intbind(intsockfd,conststructsockaddr*addr,socklen_taddrlen);structsockaddrstructsockaddr_unstructsockaddr_in/structsockaddr_in6intconne......