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

C++ STL①

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

C++ STL①

C++标准模板库包含三个核心组件:容器container、算法algorithm、迭代器iterator。

STL①
  • 前言
  • 示例demo
    • 注意点
  • 补充


前言
组件描述
容器容器是用来管理某一类对象的集合,C++提供了一系列各种不同的容器,比如deque、list、vector、map等等,
算法算法作用于容器,提供了执行各种操作的方式,包括i对容器内容执行初始化,排序、搜索和转换等操作。
迭代器迭代器用于遍历对象集合的元素,这些集合可以是容器,也可以是容器的子集。

以上三个组件都带有非常丰富的预定义函数,帮助我们通过简单的方式处理复杂任务。


示例demo

给出向量容器vector,与数组十分类似,唯一差异在于,向量需要拓展大小的时候,自动处理存储请求。

#include 
#include 

using namespace std;

int main() {
	//创建一个向量存储int
	vector vec;
	int i;
	//显示vec的原始大小
	cout << "vector origin size = " << vec.size() << endl;
	//输入前5个数值到向量之中
	for (i = 0; i < 5; i++) {
		vec.push_back(i);
	}
	//显示vec拓展之后的大小
	cout << "extend vec size = " << vec.size() << endl;
	//访问向量中的5个元素
	for (i = 0; i < 5; i++) {
		cout << "value of vec [" << i << "] = " << vec[i] << endl;
	}
	//利用迭代器遍历
	vector::iterator v = vec.begin();
	while (v != vec.end()) {
		cout << "value of v = " << *v << endl;
		v++;
	}
	return 0;
}
注意点
  1. push_back成员函数在向量的尾部插入元素,若有必要会拓展向量的数值大小。
  2. size函数显示向量vector的大小。
  3. begin函数返回一个指向向量开头的迭代器。
  4. end函数返回一个指向向量末尾的迭代器。

补充

C++ STL中vector的capacity和size差异:

  • size时当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。
  • capacity是指的发生realloc过程之前能够允许的最大元素数量,预分配的内存空间。

当然,这两个属性分别对应了两个不同的方法:resize()和 reverse()。
利用resize容器内的对象内存空间是真正存在的。
利用reverse仅仅只是修改了capacity的数值,容器内的对象还没有真实的内存空间,给出如下代码:

#include 
#include 

using std::vector;
int main(void)
{
    vector v;
    std::cout<<"v.size() == " << v.size() << " v.capacity() = " << v.capacity() << std::endl;
    v.reserve(10);
    std::cout<<"v.size() == " << v.size() << " v.capacity() = " << v.capacity() << std::endl;
    v.resize(10);
    v.push_back(0);
    std::cout<<"v.size() == " << v.size() << " v.capacity() = " << v.capacity() << std::endl;

    return 0;
}

注意:
对于reverse(10)后接着直接使用[]访问越界会报错。

相关阐述:
针对capacity这个属性,STL的其他容器,例如list、map、deque等等,容器内存分布为散列,不会发生realloc的调用错误情况,因此可以说capacity属性对上述容器无效。
在STL中,拥有capacity属性的容器只有vector和string。

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

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

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