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

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

相关推荐
霁月风10 分钟前
设计模式——适配器模式
c++·适配器模式
萧鼎21 分钟前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸22 分钟前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农22 分钟前
Python 继承、多态、封装、抽象
开发语言·python
^velpro^23 分钟前
数据库连接池的创建
java·开发语言·数据库
秋の花31 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows
jrrz082832 分钟前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
小松学前端34 分钟前
第六章 7.0 LinkList
java·开发语言·网络
可峰科技43 分钟前
斗破QT编程入门系列之二:认识Qt:编写一个HelloWorld程序(四星斗师)
开发语言·qt
咖啡里的茶i1 小时前
Vehicle友元Date多态Sedan和Truck
c++