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 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> STL常用容器——vector容器的使用 -> 正文阅读

[C++知识库]STL常用容器——vector容器的使用

STL常用容器——vector容器的使用

1、vector容器概念

vector 容器是 STL中最常用的容器之一,它和数组非常类似,都可以看做是对 C++普通数组的“升级版”。

vector 实现的是一个动态数组,可以动态扩展,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间。

vector 在尾部插入或删除元素,时间复杂度为O(1)

而在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)

2、vector容器构造方式

vector<T> v; 采用模板实现类实现,默认构造函数

vector(v.begin() , v.end()); 将v[begin(),end())区间中的元素拷贝给本身

vector(n,elem); 构造函数将n个elem拷贝给本身

vector(const vector &vec); 拷贝构造函数

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

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

void test01() {
    //默认构造
	vector<int> v1;
	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}

	printVector(v1);

	//通过拷贝区间进行构造
	vector<int> v2(v1.begin(), v1.end());
	printVector(v2);

	//n个elem
	vector<int> v3(7, 7);
	printVector(v3);

	//拷贝构造函数
	vector<int> v4(v3);
	printVector(v4);
}

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

3、vector赋值操作

vector& operator=(const vector &vec); 重载等号操作符

assign(beg,end); 将[beg,end)区间中的数据拷贝赋值给本身

assign(n,elem); 将n个elem拷贝赋值给vector本身

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

void printVector(vector<int>& vec) {
	for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
}
void test02() {
	vector<int> v5;
	for (int i = 0; i < 10; i++) {
		v5.push_back(i);
	}

	printVector(v5);

	vector<int> v6 = v5;
	printVector(v6);

	vector<int> v7;
	v7.assign(v5.begin(), v5.end());
	printVector(v7);

	vector<int> v8;
	v8.assign(7, 7);
	printVector(v8);
}

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

4、vector容量(capacity)和大小(size)的区别

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

capacity(); 容器的容量

size(); 返回容器中元素的个数

resize(int num ); 重新指定容器的长度为num,若容器长度变长,则以原值填充;如果容器长度变短,则超出容器长度的末尾元素要被删除

resize(int num,elem); 重新指定容器的长度为num,若容器长度变长,则以elem值填充新位置;如果长度变短,则超出容器长度的末尾元素要被删除

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

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

void test01() {
	vector<int> v1;

	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}

	if (v1.empty()) {//为真代表容器为空
		cout << "v1为空" << endl;
	}
	else {
		cout << "容器不为空" << endl;
		cout << "容器的容量为:" << v1.capacity() << endl;
		cout << "容器的大小为:" << v1.size() << endl;
	}
	//重新指定容器大小,填充
	v1.resize(15, 6);
	printVector(v1);

    //重新指定容器大小后删除多余元素
	v1.resize(3);
	printVector(v1);
}
int main() {
	test01();
	system("pause");
	return 0;
}

5、vector添加和删除

push_back(ele); 元素尾部添加元素ele

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

insert(const_iterator pos,ele); 在迭代器指向的位置pos添加元素ele

insert(const_iterator pos,int cout,els); 在迭代器指向的位置pos添加cout个元素ele

erase(const_iterator pos); 删除迭代器指向的元素

erase(const_iterator start,const_iterator end); 删除迭代器start到end之间的元素

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

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

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

void test01() {
	vector<int> v1;

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

	//尾删
	v1.pop_back();
	printVector(v1);

	//头部插入-1
	v1.insert(v1.begin(), -1);
	printVector(v1);

	//尾部插入2个11
	v1.insert(v1.end(), 2, 11);
	printVector(v1);

	//删除头部元素
	v1.erase(v1.begin());
	printVector(v1);

	//清空
	v1.erase(v1.begin(), v1.end());
	v1.clear();
	printVector(v1);

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

6、vector数据存取

at(int idx); 返回容器索引idx所指的数据

operator[ int idx ]; 返回容器索引idx所指的数据

front(); 返回容器的第一个元素

back(); 返回容器的最后一个元素

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

void test01() {
	vector<int> v1;

	for (int i = 0; i < 10; i++) {
		v1.push_back(i);
	}
	//获取数据
	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < v1.size(); i++) {
		cout << v1.at(i) << " ";
	}
	cout << endl;
	cout << "容器第一个元素为: " << v1.front() << endl;
	cout << "容器最后一个元素为: " << v1.back() << endl;
}
int main() {
	test01();
	system("pause");
	return 0;
}

vector容器互换和增加容器容量

swap():交换两个容器的所有元素

reserve():增加容器的容量

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:22:12  更:2022-10-08 20:24:59 
 
开发: 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年5日历 -2024/5/19 3:17:14-

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