•尽量避免使用C风格数组,有很多安全隐患
本质是指针指向的一块连续内存,引用语义,不带长度信息,易错点:拷贝、传参、返回值
•不要使用指针传递数组,传递指针仅代表单个对象
void func(int * p) //不好
{
}
void func(const vector<int> & array) //推荐
{
}
•不要使用C风格数组承载多态对象(基类、子类)
•使用抽象管理内存
•使用vector实现变长数组,替代堆上的C风格数组
•使用array实现定长数组,替代栈上的C风格数组
vector<int> v1={1,2,3,4,5,6,7,8}; //тає
vector v2={1,2,3,4,5,6,7,8};
v2.reserve(1000);
for(auto& value : v2)
{
std::cout << value << ' ';
value++;
}
cout<<endl;
for(auto value: v2) //copy
{
cout<<value<<' ';
}
cout<<endl;
Vector 底层实现是 通过指针指向一块堆内存
std::array<int, 6> a1{ 1, 2, 3,4,5,6 }; //stack-based
array a2 = {1, 2, 3,4,5};
std::array 的底层实现是一块 栈数组 和 vector 不一样
伪代码 类似
template<typename T, int x>
class array
{
T arr[n];
}