#include <iostream>
#include <vector> // std::vector
#include <array> // std::array
#include <algorithm> //std::sort
void test1()
{
/* vector容器会自动扩张,当size操过3/4 * capacity容量后,会新申请2倍
容量内存空间,将原空间元素拷贝到新空间中,并clear原空间元素,但内存未释放
若vector中元素很大,会造成内存
*/
std::vector<int> vec;
std::cout<<vec.size()<<" "<<vec.capacity()<<std::endl;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
std::cout<<vec.size()<<" "<<vec.capacity()<<std::endl;
vec.push_back(6);
vec.push_back(7);
vec.push_back(8);
vec.push_back(9);
std::cout<<vec.size()<<" "<<vec.capacity()<<std::endl;
// 手动shrink_to_fit() 释放这部分内存
vec.shrink_to_fit();
std::cout<<vec.size()<<" "<<vec.capacity()<<std::endl;
}
constexpr int get_count(int a, int b)
{
return (a)+(b);
}
void show_array(int *arr, int size)
{
int i = 0;
for (i = 0; i < size; ++i)
{
printf("i:%d ", arr[i]);
}
printf("\n");
}
void test2()
{
// 当知道具体元素个数大小时,使用std::array容器可以节省内存空间
// 需要知道类型、元素个数
std::array<int, get_count(1,3)> arr = {1,2,3,4};
for(auto it : arr)
{
std::cout<<it<<std::endl;
}
// 使用lambda表达式进行array排序
std::sort(arr.begin(), arr.end(), [](int a, int b){return a>b;});
for(auto it : arr)
{
std::cout<<it<<std::endl;
}
// 使用C语言风格进行遍历
show_array(&arr[0], arr.size());
show_array(arr.data(), arr.size());
}
int main()
{
test1();
test2();
}
C++新特性array
最新推荐文章于 2024-09-08 17:22:22 发布