C++从零开始的打怪升级之路(day24)

这是关于一个普通双非本科大一学生的C++的学习记录贴

在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料

那么开启正题

今天分享的是关于vector的一些函数

1.构造函数

cpp 复制代码
vector()                       // 无参构造函数
vector(size_t typen,const vaule_type& val = vaule_ type())      //构造并初始化n个val
vector(const vector& x)                                    //拷贝构造
vector(inputlterator first,inputlterator last)                //使用迭代器进行初始化构造
cpp 复制代码
void vectorTest1()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);

	vector<int> v2(v1);
	vector<int> v3(10, 1);
	vector<int> v4(v1.begin() + 1, v1.end());
}

2.关于iterstor的使用

cpp 复制代码
begin() + end()       //获取第一个数据的位置与获取最后一个元素后面的位置
rbegin() + rend()     //获取第一个元素的前面的位置与获取最后一个元素的位置
cpp 复制代码
void vectorTest2()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	
	vector<int>::const_iterator it = v.begin();
	while (it != v.end())
	{
		//++(*it);
		cout << *it << " ";
		++it;
	}
	cout << endl;
}

如果是const迭代器就不能修改,一般迭代器可以进行修改

cpp 复制代码
void vectorTest3()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	vector<int>::reverse_iterator it = v.rbegin();
	while (it != v.rend())
	{
		//++(*it);
		cout << *it << " ";
		++it;
	}
	cout << endl;
}

反向迭代器的名字加上了reverse_ ,修改规则与上面同样的

cpp 复制代码
void vectorTest4()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}
cpp 复制代码
void vectorTest4()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	for (auto& e : v)
	{
		e++;
		cout << e << " ";
	}
	cout << endl;
}

当然,支持迭代器就支持范围for,值得注意的是,范围for根据是否需要写数据可以选择加上或者不加上&

3.空间问题

cpp 复制代码
size()        //获取数据的个数
capacity()    //获取容量的大小
empty()       //判断是否为空
resize()      //改变vector的size
reserve()     //改变vector的capacity
cpp 复制代码
void vectorTest5()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	cout << v.size() << endl;
	cout << v.capacity() << endl;

	cout << v.empty();
	v.resize(2);
	v.reserve(10);
}

空间的管理与string相似,这里不再详说

4.增删查改

cpp 复制代码
push_back()      //尾插
pop_back()       //尾删
find()           //查找
insert()         //在pos位置前插入
erase()          //删除pos的位置
swap()           //交换两个vector的数据空间
operator[]       //像数组一样访问

注意find不是vector自身提供的方法,是STL提供的算法

cpp 复制代码
void vectorTest6()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	v.pop_back();

	vector<int>::iterator pos = find(v.begin(), v.end(), 3);
	if (pos != v.end())
	{
		v.insert(pos, 10);
	}

	pos = find(v.begin(), v.end(), 2);
	v.erase(pos);

	for (auto& e : v)
	{
		cout << e << " ";
	}
	cout << endl;
}

注意,insert是前插

cpp 复制代码
void vectorTest7()
{
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);

	vector<int> v2;
	v2.push_back(10);
	v2.push_back(20);
	v2.push_back(30);
	v2.push_back(40);
	v2.push_back(50);

	swap(v1, v2);
}

注意:vs下capacity是按1.5倍增长的,g++是按2倍增长的,它们的STL版本不一样

新手写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!!

相关推荐
XMYX-010 分钟前
03 - Go 常用类型速查表 + 实战建议(实战向)
开发语言·golang
爱码驱动10 分钟前
Java多线程详解(5)
java·开发语言·多线程
6Hzlia18 分钟前
【Hot 100 刷题计划】 LeetCode 45. 跳跃游戏 II | C++ 贪心算法最优解题解
c++·leetcode·游戏
@atweiwei20 分钟前
用 Rust 构建 LLM 应用的高性能框架
开发语言·后端·ai·rust·langchain·llm
九转成圣24 分钟前
实战记录:用 Java 拼接长图/网格图,我踩了哪些坑?
java·开发语言
lzhdim30 分钟前
SQL 入门 9:SQL 高级子查询:ANY、EXISTS 与多位置应用
java·开发语言·数据库·sql·mysql
Dream of maid31 分钟前
Python(11) 进程与线程
开发语言·python
森G40 分钟前
48、柱状图---------QChart
c++·qt
cici1587442 分钟前
非线性模型预测控制(NMPC)基于CasADi的MATLAB实现
开发语言·matlab
Tanecious.1 小时前
蓝桥杯备赛:Day8-小苯的异或和
c++·蓝桥杯