vector 相比于数组好用得多,最重要一点是在往 vector 添加元素时,vector 会自动增加所需要的内存,看源码可知它是以 2 倍于当前元素大小进行增加。但这样也存在珍上问题,在你增加元素后,vector 所占内存逐渐增加,即使我们使用 clear() 其内存也是不会释放的,直到 vector 变量释放时,其所占内存才会被释放。
若要手动释放内存,我们可以调用 swap() 。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>
#include <algorithm>
void printVec(const std::vector<std::string> &vec);
int main()
{
std::vector<std::string> strVec;
strVec.push_back("uface");
strVec.push_back("904147139");
strVec.push_back("247412");
strVec.push_back("handshake");
//添加一个作用域
{
std::vector<std::string> tmpVec; //一个空的vector
strVec.swap(tmpVec); //交换后,strVec变成空的了
printf("size of tmpVec = %lu, tmpVec = %lu\n", tmpVec.size(), tmpVec.capacity());
}
printf("size of strVec = %lu, capacity = %lu\n", strVec.size(), strVec.capacity());
printVec(strVec);
return 0;
}
void printVec(const std::vector<std::string> &vec)
{
for(auto ite : vec)
{
printf("%s\n", ite.c_str());
}
}
若只是减少内存而不是释放呢,其实我们可以调用 shrink_to_fit() 接口,该接口会将容器占用的内存缩小到合适的大小。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>
#include <algorithm>
void printVec(const std::vector<std::string> &vec);
int main()
{
std::vector<std::string> strVec;
strVec.reserve(20);
strVec.push_back("uface");
strVec.push_back("904147139");
strVec.push_back("247412");
strVec.push_back("handshake");
printf("size of strVec = %lu, capacity = %lu\n", strVec.size(), strVec.capacity());
strVec.shrink_to_fit();
printf("size of strVec = %lu, capacity = %lu\n", strVec.size(), strVec.capacity());
printVec(strVec);
return 0;
}
void printVec(const std::vector<std::string> &vec)
{
for(auto ite : vec)
{
printf("%s\n", ite.c_str());
}
}