5.vector容器的使用

news2025/1/16 18:50:48

文章目录

    • vector容器
      • 1.构造函数
        • 代码工程
        • 运行结果
      • 2.赋值
        • 代码工程
        • 运行结果
      • 3.容量和大小
        • 代码工程
        • 运行结果
      • 4.插入和删除
        • 代码工程
        • 运行结果
      • 5.数据存取
        • 工程代码
        • 运行结果
      • 6.互换容器
        • 代码工程
        • 运行结果
      • 7.预留空间
        • 代码工程
        • 运行结果

vector容器

1.构造函数

/*1.默认构造-无参构造*/
/*2.通过区间的方式进行构造*/
/*3.n个elem方式构造*/
/*4.拷贝构造*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>

using namespace std;

void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}


void test01()
{
	/*1.默认构造-无参构造*/
	vector<int>v1;

	/*尾插*/
	for (int i = 0; i < 5 ; i++)
	{
		v1.push_back(i);
	}

	cout << "v1容器的数据: ";
	/*打印*/
	printVector(v1);

	/*2.通过区间的方式进行构造*/
	vector<int>v2(v1.begin(), v1.end());

	cout << "v2容器的数据: ";
	/*打印*/
	printVector(v2);

	/*3.n个elem方式构造*/
	vector<int>v3(5, 100);

	cout << "v3容器的数据: ";
	/*打印*/
	printVector(v3);

	/*4.拷贝构造*/
	vector<int>v4(v3);

	cout << "v4容器的数据: ";
	/*打印*/
	printVector(v4);

	return;
}


int main()
{
	test01();


	return 0;
}
运行结果

在这里插入图片描述

2.赋值

/* 1.赋值  operator= */
/* 2.赋值  assign 迭代器区间*/
/* 3.赋值  assign n个elem的方式*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;


void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	return;
}

void test()
{
	vector<int>v1;

	/*尾插*/
	for (int i = 0; i < 5; i++)
	{
		v1.push_back(i);
	}
	cout << "v1容器的数据: ";

	printVector(v1);

	/* 1.赋值  operator= */
	vector<int>v2;
	v2 = v1;

	cout << "v2容器的数据: ";

	printVector(v2);

	/* 2.赋值  assign 迭代器区间*/
	vector<int>v3;
	v3.assign(v2.begin(), v2.end());/*注意是:闭开区间*/

	cout << "v3容器的数据: ";

	printVector(v3);

	/* 3.赋值  assign n个elem的方式*/
	vector<int>v4;
	v4.assign(5, 200);

	cout << "v4容器的数据: ";

	printVector(v4);

	return;
}


int main()
{
	test();

	return 0;
}
运行结果

在这里插入图片描述

3.容量和大小

/*1.empty() 如果为不空,返回值是0*/
/*2.capacity() 查询容量*/
/*3.size() 查询容器中的数据个数*/
/*4.resize() 重新指定大小*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;

	return;
}

void test()
{
	vector<int>v1;

	/*尾插*/
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
	cout << "v1容器的数据: ";

	printVector(v1);

	/*1.empty() 如果为不空,返回值是0*/
	if (v1.empty())
	{
		cout << "v1容器为空" << endl;
		return ;
	}

	/*2.capacity() 查询容量*/
	cout << "v1的容量为:" << v1.capacity() << endl;

	/*3.size() 查询容器中的数据个数*/
	cout << "v1的大小为:" << v1.size() << endl;

	/*4.resize() 重新指定大小*/
	
	cout << "v1重新指定长度为15时 :";
	v1.resize(15);/*如果重新指定的比原来长了,默认用0填充新的位置*/
	//v1.resize(15, 100);/*利用重载版本,可以指定默认值的填充*/

	printVector(v1);

	cout << "v1重新指定长度为5时 :";
	v1.resize(5);/*如果重新指定的比原来短了,超出的部分会删除掉*/

	printVector(v1);

	return;
}


int main()
{
	test();

	return 0;
}
运行结果

在这里插入图片描述

4.插入和删除

/*1.尾删*/
/*2.插入 - 迭代器输入*/
/*3.删除 - 迭代器输入*/
/*4.清空*/
代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

/*1.尾删*/
/*2.插入 - 迭代器输入*/
/*3.删除 - 迭代器输入*/
/*4.清空*/
void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test()
{
	vector<int>v1;
	/*尾插*/
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);

	cout << "v1容器的数据: ";

	printVector(v1);

	/*1.尾删*/
	v1.pop_back();

	cout << "尾删后v1容器中的数据: ";

	printVector(v1);

	/*2.插入- 迭代器输入*/
	v1.insert(v1.begin(), 1000);

	cout << "插入后v1容器中的数据: ";

	printVector(v1);

	/*利用重载的版本,可以插入多个重复的数据*/

	v1.insert(v1.begin(), 2, 2000);

	cout << "插入后v1容器中的数据: ";

	printVector(v1);

	/*3.删除 - 迭代器输入*/
	v1.erase(v1.begin());

	cout << "删除后v1容器中的数据: ";

	printVector(v1);

	/*删除 - 区间删除*/
	v1.erase(v1.begin(), v1.end());

	if (v1.empty())/*v1为空,empty()返回值为1*/
	{
		cout << "当前容器为空!" << endl;
	}

	/*尾插*/
	v1.push_back(10);
	v1.push_back(20);

	printVector(v1);

	/*4.清空*/
	v1.clear();

	cout << "清空v1容器中的数据: ";

	if (v1.empty())/*v1为空,empty()返回值为1*/
	{
		cout << "当前容器为空!" << endl;
	}

	return;
}

int main()
{
	test();

	return 0;
}
运行结果

在这里插入图片描述

5.数据存取

/*1.利用[]方式访问数组中的元素*/
/*2.利用at方式访问数组中的元素*/
/*3.获取第一个元素*/
/*4.获取第最后一个元素*/
工程代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

/*1.利用[]方式访问数组中的元素*/
/*2.利用at方式访问数组中的元素*/
/*3.获取第一个元素*/
/*4.获取第最后一个元素*/

void test()
{
	vector<int>v1;
	/*尾插*/
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);

	cout << "利用[]访问v1容器的数据: ";

	/*1.利用[]方式访问数组中的元素*/
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;

	cout << "利用at访问v1容器的数据: ";

	/*2.利用at方式访问数组中的元素*/
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1.at(i) << " ";
	}
	cout << endl;

	cout << "访问v1容器的第一个数据: ";

	/*3.获取第一个元素*/
	cout << v1.front() << endl;

	cout << "访问v1容器的最后一个数据: ";

	/*4.获取第最后一个元素*/
	cout << v1.back() << endl;

	return;
}

int main()
{
	test();

	return 0;
}
运行结果

在这里插入图片描述

6.互换容器

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

void printVector(const vector<int>&v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test()
{
	vector<int>v1;
	/*尾插*/
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);
	v1.push_back(40);
	v1.push_back(50);

	cout << "v1容器的数据: ";

	printVector(v1);

	vector<int>v2;
	/*尾插*/
	v2.push_back(100);
	v2.push_back(200);
	v2.push_back(300);
	v2.push_back(400);
	v2.push_back(500);

	cout << "v2容器的数据: ";

	printVector(v2);

	cout << "-----------交换容器的数据后-----------" << endl;

	/*交换两个容器中的数据*/
	v1.swap(v2);

	cout << "v1容器的数据: ";

	printVector(v1);

	cout << "v2容器的数据: ";

	printVector(v2);

	return;
}

void test01()
{
	/*交换容器的实际作用:利用swap可以收缩内存空间*/
	vector<int>v;
	for (int i = 0; i < 100000; i++)
	{
		v.push_back(i);
	}

	cout << "v容器的容量:" << v.capacity() << endl;
	cout << "v容器的大小:" << v.size() << endl;

	/*重新指定大小*/
	v.resize(5);
	cout << "重新指定v容器的大小: " << endl;

	cout << "v容器的容量:" << v.capacity() << endl;
	cout << "v容器的大小:" << v.size() << endl;


	cout << "收缩v容器的大小: " << endl;
	/*利用swap收缩内存空间*/
	vector<int>(v).swap(v);
	cout << "v容器的容量:" << v.capacity() << endl;
	cout << "v容器的大小:" << v.size() << endl;



	return;
}
int main()
{
	test();

	cout << endl;
	cout << "swap的实际作用" << endl;

	test01();

	return 0;
}
运行结果

在这里插入图片描述

7.预留空间

代码工程
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>

using namespace std;

void printVector(const vector<int>& v)
{
	for (vector<int>::const_iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}

void test()
{
	vector<int>v1;
	int* p = NULL;
	int num = 0;
	/*计算出尾插十万次,容器重新开辟空间的次数*/
	for (int i = 0; i < 100000; i++)
	{
		v1.push_back(i);
		if (p != &v1[0])
		{
			num++;
			p = &v1[0];
		}
	}

	cout << "v1容器重新开辟空间的次数:" << num << endl;

	return;
}

void test01()
{
	vector<int>v1;
	int* p = NULL;
	int num = 0;

	/*预留空间 - reserve*/
	v1.reserve(100000);

	p = NULL;
	for (int i = 0; i < 100000; i++)
	{
		v1.push_back(i);
		if (p != &v1[0])
		{
			num++;
			p = &v1[0];
		}
	}

	cout << "预留空间后v1容器重新开辟空间的次数:" << num << endl;

	return;
}

int main()
{
	test();

	cout << endl;

	test01();

	return 0;
}
运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1565087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java的商城网站系统设计与实现:Spring Boot后端与Vue.js前端

本文介绍了如何利用Java的Spring Boot框架和Vue.js技术构建一个商城网站系统。通过采用B/S结构&#xff0c;后端使用Spring Boot进行开发&#xff0c;前端采用Vue.js进行开发&#xff0c;实现了系统的设计与实现。 随着电子商务的兴起&#xff0c;商城网站成为了现代人购物的主…

网络安全 | 什么是DDoS攻击?

关注WX&#xff1a;CodingTechWork DDoS-介绍 DoS&#xff1a;Denial of Service&#xff0c;拒绝服务。DDoS是通过大规模的网络流量使得正常流量不能访问受害者目标&#xff0c;是一种压垮性的网络攻击&#xff0c;而不是一种入侵手段。NTP网络时间协议&#xff0c;设备需要…

【图像分割】nnUnetV1与V2的Linux部署与应用命令

以前觉得麻烦&#xff0c;一直没用过nnunet&#xff0c;虽然知道它很火&#xff0c;最近一个契机&#xff0c;部署使用了一下nnunet&#xff0c;记录一下其部署和使用的方法与命令。 1、部署 首先&#xff0c;我有一个环境&#xff0c;这个环境可以是以前就有的&#xff0c;也可…

左值与右值,以及c++11的相关特性。

目录 左值 右值 左值引用总结&#xff1a; 右值引用总结&#xff1a; 右值引用使用场景和意义&#xff1a; 1、左值引用的使用场景&#xff1a; 编译器优化1&#xff1a; 2、移动构造与移动赋值&#xff1a; 3、右值引用的使用场景&#xff1a; 编译器优化2&#xff1a…

Qt_Note20_QML_自定义Grid控件与OpacityMask的使用

import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12 import QtGraphicalEffects 1.14Window {visible: truewidth: 640height: 480title: qsTr("Hello World")// 自定义Grid控件与OpacityMask的使用Grid {id: gridwidth: 15height: 200co…

SQL语句学习+牛客基础39SQL

什么是SQL&#xff1f; SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;。 SQL 的范围包括数据插入、查询、更新和删除&#xff0c;数据库模式创建和修改&#xff0c;以及数据访问控制。 SQL语法 数据库表 一个…

Autosar-从0到1构建Autosar最小系统(免费)-1

1建立Ecu最小系统 1.1Ecu最小系统组成 Ecu最小系统至少需要&#xff1a;SWC、Com、ComM、EcuM、BswM、Os、RTE等。 Autosar各模块的配置以arxml文件形式保存&#xff0c;因此生成以上模块需要以下各个arxml文件。 模块 所需的arxml文件 准备好以上arxml文件后&#xff0c;就可…

python核心篇之桌面程序

推荐使用: wxPython 一. 安装wxPython 二. 第一个wxPython程序 展示 代码 # coding: utf-8import wx# 创建应用程序对象 app wx.App() # 创建窗口对象 frame wx.Frame(None, title"Hello World", size(300, 200), pos(100, 100)) # 显示窗口 frame.Show() # 进入主…

【Spring实战项目】SpringBoot3整合WebSocket+拦截器实现登录验证!从原理到实战

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

CV论文--2024.4.3

1、Style Aligned Image Generation via Shared Attention 中文标题&#xff1a;共享注意力下的风格对齐图像生成 简介&#xff1a;大规模文本到图像&#xff08;T2I&#xff09;模型在创意领域迅速崭露头角&#xff0c;可以从文本提示中生成视觉上引人入胜的输出。然而&#…

【卫星家族】 | 高分六号卫星影像及获取

1. 卫星简介 高分六号卫星&#xff08;GF-6&#xff09;于2018年6月2日在酒泉卫星发射中心成功发射&#xff0c;是高分专项中的一颗低轨光学遥感卫星&#xff0c;也是我国首颗精准农业观测的高分卫星&#xff0c;具有高分辨率、宽覆盖、高质量成像、高效能成像、国产化率高等特…

C语言 | Leetcode C语言题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; int myAtoi(char * s){int i0;int out0;int pol1;int lenstrlen(s);if(len0) return 0;while(s[i] ) i; //删除空格if(s[i]-){ //判断正负pol-1;i;}else if(s[i]){pol1;i;}else{pol1;}while(s[i]!\0){if(s[i]<0||s[i]>9){ /…

【Turtle】海龟先生

什么是编程 计算机只懂0和1这样的语言&#xff0c;可是我们不懂&#xff0c;当我们希望 计算要能帮我们做事情的时候&#xff0c;该怎么办呢&#xff1f; 我们需要一种更简便的方法告诉计算机要做什么&#xff0c;所以人类发明了编程语言 利用计算机编程语言&#xff0c;我们…

Transformer - 注意⼒机制

Transformer - 注意⼒机制 flyfish 计算过程 flyfish # -*- coding: utf-8 -*-import torch import torch.nn as nn import torch.nn.functional as F import os import mathdef attention(query, key, value, maskNone, dropoutNone):# query的最后⼀维的⼤⼩, ⼀般情况下就…

动态规划详解(Dynamic Programming)

目录 引入什么是动态规划&#xff1f;动态规划的特点解题办法解题套路框架举例说明斐波那契数列题目描述解题思路方式一&#xff1a;暴力求解思考 方式二&#xff1a;带备忘录的递归解法方式三&#xff1a;动态规划 推荐练手题目 引入 动态规划问题&#xff08;Dynamic Progra…

QT背景介绍

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、QT背景 1.1什么是QT 1.2QT的发展历史 1.3什么是框架、库 1.4QT支持的平台 1.5QT的优点 1.6QT的…

分布式锁 — Redisson 全面解析!

前言 分布式锁主要是解决集群&#xff0c;分布式下数据一致性的问题。在单机的环境下&#xff0c;应用是在同一进程下的&#xff0c;只需要保证单进程多线程环境中的线程安全性&#xff0c;通过 JAVA 提供的 volatile、ReentrantLock、synchronized 以及 concurrent 并发包下一…

JVM_垃圾收集器

GC垃圾收集器 文章目录 GC垃圾收集器GC垃圾回收算法和垃圾收集器关系GC算法主要有以下几种四种主要的垃圾收集器SerialParallelCMSG1垃圾收集器总结查看默认垃圾收集器 默认垃圾收集器有哪些各垃圾收集器的使用范围部分参数说明 新生代下的垃圾收集器并行GC(ParNew)并行回收GC&…

[Python GUI PyQt] PyQt5快速入门

PyQt5快速入门 PyQt5的快速入门0. 写在前面1. 思维导图2. 第一个PyQt5的应用程序3. PyQt5的常用基本控件和布局3.1 PyQt5的常用基本控件3.1.1 按钮控件 QPushButton3.1.2 文本标签控件 QLabel3.1.3 单行输入框控件 QLineEdit3.1.4 A Quick Widgets Demo 3.2 PyQt5的常用基本控件…

morkdown语法转微信公众号排版(免费)

morkdown语法转微信公众号排版&#xff08;免费&#xff09; 源码来自githab&#xff0c;有些简单的问题我都修复了。大家可以直接去找原作者的源码&#xff0c;如果githab打不开就从我下载的网盘里下载吧。 效果