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版本不一样

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

相关推荐
小镇敲码人1 分钟前
剖析CANN框架中Samples仓库:从示例到实战的AI开发指南
c++·人工智能·python·华为·acl·cann
萧鼎3 分钟前
Python 包管理的“超音速”革命:全面上手 uv 工具链
开发语言·python·uv
Anastasiozzzz31 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步35 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机1 小时前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经1 小时前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L1 小时前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
我在人间贩卖青春1 小时前
C++之this指针
c++·this
云姜.1 小时前
java多态
java·开发语言·c++