文章目录
- 1.vector的使用
- 2.vector空间增长问题
- (1)size 获取数据个数
- (2)capacity 获取容量大小
- (3)empty 判断是否为空
- (4)resize 改变vector的size
- (5)reserve 改变vector的capacity
1.vector的使用
vector和含义、vector构造函数、vector迭代器
vector完整介绍
2.vector空间增长问题
(1)size 获取数据个数
size()函数用于返回容器中元素的个数。
下面是一个使用std::vector的size()函数的例子:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers; // 创建一个int类型的vector容器
numbers.push_back(10); // 向容器中添加元素
numbers.push_back(20);
numbers.push_back(30);
numbers.push_back(40);
std::cout << "容器中元素的个数为:" << numbers.size() << std::endl;
return 0;
}
//容器中元素的个数为:4
(2)capacity 获取容量大小
vector容器的capacity()函数用于返回当前容器的容量,即底层数组能够容纳的最大元素数量。
下面是一个使用std::vector的capacity()函数的例子:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers; // 创建一个int类型的vector容器
std::cout << "初始容器的容量为:" << numbers.capacity() << std::endl;
numbers.push_back(10); // 向容器中添加元素
numbers.push_back(20);
numbers.push_back(30);
numbers.push_back(40);
std::cout << "添加四个元素后的容器的容量为:" << numbers.capacity() << std::endl;
return 0;
}
//初始容器的容量为:0
//添加四个元素后的容器的容量为:4
size()和capacity()有不同的地方:
size()函数用于返回容器中当前存储的元素数量,即容器中的实际元素个数。
capacity()函数用于返回容器底层实际分配的存储空间大小,即容器能够容纳的最大元素数量。
(3)empty 判断是否为空
empty()函数用于检查vector容器是否为空,即是否没有任何元素。它返回一个布尔值,true表示容器为空,false表示容器非空。
下面是一个使用empty()函数的例子:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers; // 创建一个int类型的vector容器
if (numbers.empty()) {
std::cout << "容器为空" << std::endl;
} else {
std::cout << "容器非空" << std::endl;
}
numbers.push_back(10); // 向容器中添加元素
if (numbers.empty()) {
std::cout << "容器为空" << std::endl;
} else {
std::cout << "容器非空" << std::endl;
}
return 0;
}
//容器为空
//容器非空
(4)resize 改变vector的size
resize()函数用于更改vector容器的大小,以容纳指定数量的元素。 当新的大小大于当前大小时,额外的元素将被默认构造或复制构造。当新的大小小于当前大小时,超出新大小的元素将会被删除。
下面是一个使用resize()函数的例子:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers; // 创建一个int类型的vector容器
numbers.push_back(10); // 向容器中添加元素
numbers.push_back(20);
numbers.push_back(30);
numbers.push_back(40);
std::cout << "容器中元素的个数为:" << numbers.size() << std::endl;
numbers.resize(10);
std::cout << "resize后的容器中可放元素个数为:" << numbers.size() << std::endl;
return 0;
}
//容器中元素的个数为:4
//resize后的容器中可放元素个数为:10
(5)reserve 改变vector的capacity
reserve()函数用于为容器预留一定的存储空间,以便在之后添加元素时减少重新分配内存的次数。 它接受一个参数,即预留空间的大小。注意,预留的空间大小并不会直接改变vector的size。
使用reserve()函数的目的是优化性能,当我们预知容器可能需要存储大量元素时,可以使用reserve()函数提前分配足够的内存空间,避免频繁的内存重新分配和数据复制。
下面是一个简单的例子,用于说明reserve()函数的含义和概念:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers; // 创建一个int类型的vector容器
std::cout << "初始容器的容量为:" << numbers.capacity() << std::endl;
numbers.push_back(10); // 向容器中添加元素
numbers.push_back(20);
numbers.push_back(30);
numbers.push_back(40);
std::cout << "添加四个元素后的容器的容量为:" << numbers.capacity() << std::endl;
numbers.reserve(10);
std::cout << "reserve后容器的容量为:" << numbers.capacity() << std::endl;
return 0;
}
//初始容器的容量为:0
//添加四个元素后的容器的容量为:4
//reserve后容器的容量为:10
注意:
capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2倍增长的。 这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是根据具体的需求定义的。vs是PJ版本STL,g++是SGI版本STL。
总结:
resize在开空间的同时还会进行初始化,影响size。
reserve只负责开辟空间,如果确定知道需要用多少空间,reserve可以缓解vector增容的代价缺陷问题。