本文介绍: 是静态空间,一旦配置了就不能改变,要换大一点或者小一 点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的 数据搬往新空间,再释放原来的空间。Vector 维护一个线性空间,所以不论元素的型别如何,普通指针都可以作为 vector 的迭代器,因为。的运用对于内存的合理利 用与运用的灵活性有很大的帮助,我们再也不必害怕空间不足而一开始就要求一个 大块头的 array。的容量永 远大于或等于其大小,一旦容量等于大小,便是满载,下次再有新增元素,整个 vector 容器就得另觅居所。
vector 容器
vector 容器基本概念
vector 的数据安排以及操作方式,与
array
非常相似,两者的唯一差别在于空间的 运用的灵活性。Array
是静态空间,一旦配置了就不能改变,要换大一点或者小一 点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的 数据搬往新空间,再释放原来的空间。Vector
是动态空间,随着元素的加入,它 的内部机制会自动扩充空间以容纳新元素。因此 vector
的运用对于内存的合理利 用与运用的灵活性有很大的帮助,我们再也不必害怕空间不足而一开始就要求一个 大块头的 array
了。
array
非常相似,两者的唯一差别在于空间的 运用的灵活性。Array
是静态空间,一旦配置了就不能改变,要换大一点或者小一 点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的 数据搬往新空间,再释放原来的空间。Vector
是动态空间,随着元素的加入,它 的内部机制会自动扩充空间以容纳新元素。因此 vector
的运用对于内存的合理利 用与运用的灵活性有很大的帮助,我们再也不必害怕空间不足而一开始就要求一个 大块头的 array
了。
Vector 的实现技术,关键在于其对大小的控制以及重新配置时的数据移动效率, 一旦 vector
旧空间满了,如果客户每新增一个元素,
vector
内部只是扩充一个元 素的空间,实为不智,因为所谓的扩充空间(
不论多大
)
,一如刚所说,是
”
配置新 空间-
数据移动
–
释放旧空间
”
的大工程
,
时间成本很高,应该加入某种未雨绸缪的考 虑,稍后我们便可以看到 vector
的空间配置策略。
旧空间满了,如果客户每新增一个元素,
vector
内部只是扩充一个元 素的空间,实为不智,因为所谓的扩充空间(
不论多大
)
,一如刚所说,是
”
配置新 空间-
数据移动
–
释放旧空间
”
的大工程
,
时间成本很高,应该加入某种未雨绸缪的考 虑,稍后我们便可以看到 vector
的空间配置策略。
vector 迭代器
Vector 维护一个线性空间,所以不论元素的型别如何,普通指针都可以作为 vector 的迭代器,因为
vector
迭代器所需要的操作行为,如
operaroe
, operator->,
operator++, operator–, operator+, operator-, operator+=, operator-=,
普通指针天生
具备。
Vector
支持随机存取,而普通指针正有着这样的能力。所以
vector
提供的
是随机访问迭代器
(Random Access Iterators).
vector
迭代器所需要的操作行为,如
operaroe
, operator->,
operator++, operator–, operator+, operator-, operator+=, operator-=,
普通指针天生
具备。
Vector
支持随机存取,而普通指针正有着这样的能力。所以
vector
提供的
是随机访问迭代器
(Random Access Iterators).
}
}
vector 的数据结构
Vector 所采用的数据结构非常简单,线性连续空间,它以两个迭代器 Myfirst 和 Mylast 分别指向配置得来的连续空间中目前已被使用的范围,并以迭代器
_Myend 指向整块连续内存空间的尾端。
_Myend 指向整块连续内存空间的尾端。
为了降低空间配置时的速度成本,vector
实际配置的大小可能比客户端需求大一 些,以备将来可能的扩充,这边是容量的概念。换句话说,一个 vector
的容量永 远大于或等于其大小,一旦容量等于大小,便是满载,下次再有新增元素,整个 vector 容器就得另觅居所。
实际配置的大小可能比客户端需求大一 些,以备将来可能的扩充,这边是容量的概念。换句话说,一个 vector
的容量永 远大于或等于其大小,一旦容量等于大小,便是满载,下次再有新增元素,整个 vector 容器就得另觅居所。
注意:
有可配置的空间
)
,而是一块更大的内存空间,然后将原数据拷贝新空间,并释放
原空间。因此,对 vector
的任何操作,一旦引起空间的重新配置,指向原
vector 的所有迭代器就都失效了。这是程序员容易犯的一个错误,务必小心。
)
,而是一块更大的内存空间,然后将原数据拷贝新空间,并释放
原空间。因此,对 vector
的任何操作,一旦引起空间的重新配置,指向原
vector 的所有迭代器就都失效了。这是程序员容易犯的一个错误,务必小心。
vector 常用 API 操作
vector 构造函数
vector 常用赋值操作
vector 大小操作
vector 数据存取操作
vector 插入和删除操作
vector 小案例
巧用 swap 收缩内存空间
#define _CRT_SECURE_NO_WARNINGS
vector<
int
> v;
int
> v;
for
(
int
i =
0
; i <
100000
;i ++){
(
int
i =
0
; i <
100000
;i ++){
}
//容量没有改变
}
reserve 预留空间
#define _CRT_SECURE_NO_WARNINGS
vector<
int
> v;
int
> v;
//预先开辟空间
for
(
int
i =
0
; i <
100000
;i ++){
(
int
i =
0
; i <
100000
;i ++){
count++;
}
}
}
原文地址:https://blog.csdn.net/weixin_50963877/article/details/134744051
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_26058.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。