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

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

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

那么开启正题

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

1.构造函数

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

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

2.关于iterstor的使用

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

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

void vectorTest3()
{
	vector v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

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

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

void vectorTest4()
{
	vector 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;
}
void vectorTest4()
{
	vector 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.空间问题

size()        //获取数据的个数
capacity()    //获取容量的大小
empty()       //判断是否为空
resize()      //改变vector的size
reserve()     //改变vector的capacity
void vectorTest5()
{
	vector 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.增删查改

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

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

void vectorTest6()
{
	vector 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::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是前插

void vectorTest7()
{
	vector v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);

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

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

你可能感兴趣的:(c++,开发语言)