当前位置:   article > 正文

C++-STL笔记之vector_迭代器不等于it != v1.begin()

迭代器不等于it != v1.begin()

vector:单端动态数组-支持随机存取

头文件 #include<vector>

在这里插入图片描述
图源:https://www.bilibili.com/video/BV1UT4y1R7Yv?p=129&spm_id_from=pageDriver

迭代器

vector<int> v1;
vector<int>::iterator it = v1.begin();
for(; it != v1.end(); it++){
	cout << *it << endl;
}
  • 1
  • 2
  • 3
  • 4
  • 5

1.构造函数

vector<int> v1;//1 2 3 4 5
vector<int> v2(v1.begin(), v1.end());//1 2 3 4 5
vector<int> v3(3, 111);//111 111 111
vector<int> v4(v1);//1 2 3 4 5
  • 1
  • 2
  • 3
  • 4

2.赋值

vector<int> v1;
v1.assgin(v.begin(), v.end());

vector<int> v2;
v2.assgin(3,111);

vector<int> v3;
v3 = v1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.存取

cout << v.front() << endl;//头元素
cout << v.back() << endl;//尾元素

cout << v[1] << endl;
cout << v.at(1) << endl;
  • 1
  • 2
  • 3
  • 4
  • 5
v.front() = 1;
v.back() = 1;

v[1] = 5;
v.at(1) = 6; 
  • 1
  • 2
  • 3
  • 4
  • 5

4.插入

//22 33
v.push_back(100);//尾插
//22 33 100
v.insert(v.begin(),3,4);
//4 4 4 22 33 400
  • 1
  • 2
  • 3
  • 4
  • 5

5.删除

//4 4 4 22 33 400
v.pop_back();//尾删
//4 4 4 22 33
v.erase(v.begin());
//4 4 22 33
v.erase(v.begin()+2,v.end());
//4 4
v.clear();
//
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

6.容量与大小:capacity() >= size()

cout << v.capacity() << endl;//容量是容器可以存储元素的个数
cout << v.size() << endl;//大小是当前容器内元素的个数
  • 1
  • 2

注意:
容器满了后 capacity() == size() 时,再添加元素,容器就要找一块更大的内存空间,然后将原数据拷贝新空间,并释放原空间。此时,指向原容器的迭代器就失效了。

empty()

	if(v.empty())//若容器空,则为真
  • 1

resize()

//v: 1 2 3
	v.resize(5)
//v: 1 2 3 0 0

//v: 1 2 3
	v.resize(5,111)
//v: 1 2 3 111 111

//v: 1 2 3 4 5 6 7
	v.resize(5)
//v: 1 2 3 4 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

reserve() 预留空间

vector<int> v;//容量为0,大小为0
v.reserve(100);//容量为100,大小为0 	//预留位置不初始化,元素不可访问
  • 1
  • 2

7.swap()

//v1: 1 2 3 4 5
//v2: 11 21 31 41 51 61 71
	v1.swap(v2);
//v1: 11 21 31 41 51 61 71
//v2: 1 2 3 4 5
  • 1
  • 2
  • 3
  • 4
  • 5

预留空间过大,想要缩小,使用swap()

在这里插入图片描述

vector<int>匿名对象(v).swap(v);
利用拷贝构造函数,拷贝v的有效数据来创建一个新的对象,即匿名对象。
匿名对象只存在于构造该对象的那行代码,离开构造匿名对象的那行代码后立即调用析构函数。
  • 1
  • 2
  • 3

8.二维

vector< vector<int> > v;
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);

vector< vector<int> > ::iterator it;
for(it = v.begin();it != v.end();it++){
	//*it == vector<int>
	vector<int>::iterator mit;
	for(mit = (*it).begin();mit != (*it).end();mit++){
		//*mit == int
		cout << *mit <<" ";
	}
	cout << endl;
}		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/179653?site
推荐阅读
相关标签
  

闽ICP备14008679号