栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ STL vector()容器详解——(1)创建、插入、删除

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ STL vector()容器详解——(1)创建、插入、删除

vector()是一种具有连续结构的序列式容器,它没有自定义的查找函数,使用std::find查找元素时间复杂度为O(n)。它依赖于start、finish、end_of_storage三根指针来控制整个容器,它们分别表示vector的起始位置、有效部分的终点位置和实际的终点位置,因此vector容器本身的大小是12 byte。

在本文中,我将多次使用size()和capacity()这两个vector的成员函数,前者表示有效部分的大小,后者表示实际部分的大小,关于二者的差异稍后解释。

1.如何创建一个vector对象?

(1)创建一个int类型的空vector

	//创建一个int类型的空vector
	vector vec1;
	cout << "size=" << vec1.size() << endl;
	cout << "capacity=" << vec1.capacity() << endl;

输出:

size=0
capacity=0

需要注意空vector不可通过下标调用法来访问,也就是说下述做法会报错:

    cin >> vec1[0];

(2)创建的同时指定个数

	//创建的同时指定个数
	vector vec2(5);
	cout << "size=" << vec2.size() << endl;
	cout << "capacity=" << vec2.capacity() << endl;
	for (int i = 0; i < vec2.size(); ++i)
		cout << vec2[i] << ' ';
	cout << endl;

输出:

size=5
capacity=5
0 0 0 0 0

指定个数的做法将默认初值为0,如果希望指定其他初值,可以这样做:

	vector vec2_1(5, 1);
	for (int i = 0; i < vec2_1.size(); ++i)
		cout << vec2_1[i] << ' ';
	cout << endl;

输出:

1 1 1 1 1

(3)创建的同时指定初值和个数

	//创建的同时指定初值及个数
	vector vec3{ 1,2,3,4,5 };
	cout << "size=" << vec3.size() << endl;
	cout << "capacity=" << vec3.capacity() << endl;
	for (int i = 0; i < vec3.size(); ++i)
		cout << vec3[i] << ' ';
	cout << endl;

输出:

size=5
capacity=5
1 2 3 4 5

(4)通过其他相同类型的容器或数组来创建

	//通过其他相同类型的容器来创建
	vector vec4(vec3);
	cout << "size=" << vec4.size() << endl;
	cout << "capacity=" << vec4.capacity() << endl;
	for (int i = 0; i < vec4.size(); ++i)
		cout << vec4[i] << ' ';
	cout << endl;

输出:

size=5
capacity=5
1 2 3 4 5

这种方式将复制vec3中的全部内容,也可以通过迭代器来指定复制的范围:

	vector vec4_1(vec3.begin(), vec3.begin() + 3);
	cout << "size=" << vec4_1.size() << endl;
	cout << "capacity=" << vec4_1.capacity() << endl;
	for (int i = 0; i < vec4_1.size(); ++i)
		cout << vec4_1[i] << ' ';
	cout << endl;

输出:

size=3
capacity=3
1 2 3

2.如何向vector中插入/删除一个元素?

(1)使用push_back()和pop_back()

	//通过push_back和pop_back来插入和删除元素
	vec1.push_back(1);
	cout << "size=" << vec1.size() << endl;
	cout << "capacity=" << vec1.capacity() << endl;
	for (int i = 0; i < vec1.size(); ++i)
		cout << vec1[i] << ' ';
	cout << endl;

	vec1.push_back(2);
	cout << "size=" << vec1.size() << endl;
	cout << "capacity=" << vec1.capacity() << endl;
	for (int i = 0; i < vec1.size(); ++i)
		cout << vec1[i] << ' ';
	cout << endl;

	vec1.pop_back();
	cout << "size=" << vec1.size() << endl;
	cout << "capacity=" << vec1.capacity() << endl;
	for (int i = 0; i < vec1.size(); ++i)
		cout << vec1[i] << ' ';
	cout << endl;

输出:

size=2
capacity=2
1 2
size=1
capacity=2
1

这两个函数分别是往vector的末尾插入或删除一个元素。

(2)使用emplace_back()

	//使用emplace_back插入元素
	vec1.emplace_back(3);
	cout << "size=" << vec1.size() << endl;
	cout << "capacity=" << vec1.capacity() << endl;
	for (int i = 0; i < vec1.size(); ++i)
		cout << vec1[i] << ' ';
	cout << endl;

输出结果:

size=2
capacity=2
1 3

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870098.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号