IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 我眼中的vector -> 正文阅读

[数据结构与算法]我眼中的vector

目录

1,vector基本概念

2,构造函数

3,赋值操作

4,容量和大小

5,插入和删除

6,数据存取

7,互换容器

8,预留空间


1vector基本概念

功能:

?? vector数据结构和数组非常相似,也称单端数组

?? vector与普通数组区别:

?? 不同之处在于数组是静态空间,而vector可以动态拓展

动态拓展:

?? 并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝到新空间,??????????????????

?? 释放原空间

前提:

?? 使用vector要包含头文件<vector>


2,构造函数

功能描述:

?? 创建vector容器

函数原型:

vector<T> v1;?? //默认构造函数

vector<T>v2(v.begin(),v.end());????? //将begin(),end()区间中的元素拷贝给本身

vector<T>v3(n,elem);??? //构造函数将n个elem拷贝给本身

vector<T>v4(v1);?? //拷贝构造函数


3,赋值操作

功能描述:

?? 给vector容器进行赋值

代码实现:

#include<iostream>
#include<vector>
using namespace std;
void printVector(vector<int>&v)
{
	for (vector<int>::iterator i = v.begin(); i != v.end(); i++) {
		cout << *i << endl;
	}
}
int main() {
	vector<int>v1;
	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}

	vector<int>v2;
	v2 = v1;        //1,等号赋值操作

	vector<int>v3;                 //2,assign方式赋值
	v3.assign(v2.begin(), v2.end());    //前面闭区间,后面开区间

	vector<int>v4;
	v4.assign(10, 100);     //3,n个elem方式赋值

	printVector(v2);
	return 0;
}

4,容量和大小

功能描述:

?? 对vector容器的容量和大小操作

函数原型:

? empty();??????????????????????? //判断容器是否为空

? capacity();??????????????????? //容器的容量

? size();?????????????????????????? //容器中元素的个数

? resize(int num);? //重新指定容器的长度为num,若容器变长,则以默认值0填充新位置

??????????????????????????? //若容器变短,则末尾超出容器长度的元素被删除

? resize(int num,elem);? //重新指定容器的长度为num,若容器变长,则以elem填充新位置

???????????????????????????????????? //若容器变短,则末尾超出容器长度的元素被删除


5,插入和删除

功能描述:

?? 对vector容器进行插入,删除操作

函数原型:

push_back(elem); //尾部插入元素elem

pop_back();????? //删除最后一个元素

insert(const_iterator pos, elem);

//第一个参数是迭代器,在迭代器指向位置插入elem

insert(const_iterstor pos, int count, elem);

erase(const_iterator pos);?

删除迭代器指向的元素

erase(const_iterator start, const_iterator end);

//删除迭代器从start到end之间的元素

clear(); //删除容器中所有元素


6,数据存取

功能描述:

?? 对vector容器中的数据进行存取操作

代码实现:

    vector<int>v1;
	for (int i = 3; i < 10; i++) {
		v1.push_back(i);
	}
   
	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i] << endl;     //1,通过[]方式访问数组元素
	}

	for (int i = 0; i < v1.size(); i++) {
		cout << v1.at(i) << endl;     //2,通过at方式访问数组元素
	}

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

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

7,互换容器

功能描述:

?? 实现两个容器内的元素进行互换

代码实现:

#include<iostream>
#include<vector>
using namespace std;
void printVector(vector<int>&v)
{
	for (vector<int>::iterator i = v.begin(); i != v.end(); i++) {
		cout << *i << " ";
	}
	cout << endl;
}
int main() {
	vector<int>v1;
	for (int i = 3; i < 10; i++) {
		v1.push_back(i);     //v1
	}
	vector<int>v2;
	for (int i = 10; i > 0; i--) {
		v2.push_back(i);      //v2
	}
	printVector(v1);
	printVector(v2);
	v1.swap(v2);     //swap()函数实现交换
	printVector(v1);
	printVector(v2);
	return 0;
}

实际用途:巧用swap()函数可以收缩内存空间

代码详解如下:

#include<iostream>
#include<vector>
using namespace std;
void test01()
{
	vector<int>v;
	for (int i = 0; i < 10000; i++) {
		v.push_back(i);   //向容器中放入10000个数
	}
	cout << "v的容量为:" << v.capacity() << endl;  //此时v的容量为12138
	cout << "v的大小为:" << v.size() << endl;      //大小为10000

	v.resize(5); //重新指定大小为5
	cout << "v的容量为:" << v.capacity() << endl;  //此时v的容量不变,仍为12138
	cout << "v的大小为:" << v.size() << endl;      //大小变为5
	//为避免空间浪费,可以利用swap收缩空间
	vector<int>(v).swap(v);
	cout << "v的容量为:" << v.capacity() << endl;  //此时v的容量收缩为5
	cout << "v的大小为:" << v.size() << endl;      //大小为5
}
int main() {
	test01();
	return 0;
}

本例中的vector<int>(v).swap(v);可以分成两个部分来理解。

vector<int>(v)是一个匿名对象,借助v所用的元素个数来初始化匿名对象的大小,此时大小(容量)是5。swap函数本质上类似于指针的交换,当调用.swap(v)时,就完成了两个容器的交换。匿名对象执行完之后编译器就会自动回收所占用的空间。


8预留空间

功能描述:

?? 减少vector容器在动态拓展时拓展的次数

函数原型:

reserve(int len);? //容器中预留len个元素长度,预留位置不初始化,元素不可访问


vector容器先写到这里吧,如果有错误理解或者不足的地方,欢迎小伙伴们留言指正,如果觉得有用的话麻烦点个关注,初来乍到,这是博主继续创作的动力呀。thank you! 期待下次再见。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:57:15  更:2022-02-09 20:58:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:50:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码