C++遗珠
- 生成动态数组
没有默认构造函数的类不能动态分配数组,如果非要参数,可以使用allocator类来配合生成动态数组。 - 生成二维动态数组
- 数组:
vector的内存一定是连续的。
不管是assign,push_back还是insert。
因此,在使用push_back时,每一次push都需要新建内存和拷贝内存,很耗时。所有,如果提前知道大概需要push多少个数据,可以先使用reserve()。
如果已知要添加元素的大小,或用resize,然后使用[i]加元素。 - C++类的构造函数要是public才行
- 如何编写代码
写代码的思路要明确,那一段是干什么的要先安排好注释好,即先安排好注流程需要什么样的操作就吧它封装到一个函数中,不要在主流程上写过多的代码
删除Vector中的元素
使用erase删除数组中的元素时,数组的长度会发生改变,这时普通的循环很难实现删除的功能,下面介绍一种用迭代器删除元素的方式。
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<numeric>
using namespace std;
void PrintData(vector<int>& vec)
{
for(auto val:vec)
{
cout<<val<<" ";
}
cout<<endl;
return;
}
void DeleteElem()
{
int arr[] = {1,2,3,5,4,5,6,5,5,7,8,5};
int len = sizeof(arr)/sizeof(int);
vector<int> vec(arr,arr+len);
PrintData(vec);
cout<<"删除vec中所有值为5的元素."<<endl;
vector<int>::iterator it = vec.begin();
for(;it != vec.end();)
{
if(*it == 5)
//删除指定元素,返回指向删除元素的下一个元素的位置的迭代器
it = vec.erase(it);
else
//迭代器指向下一个元素位置
++it;
}
PrintData(vec);
}
int main()
{
DeleteElem();
system("pause");
return 0;
}
输出结果:
1 2 3 5 4 5 6 5 5 7 8 5
删除vec中所有值为5的元素.
1 2 3 4 6 7 8
请按任意键继续. . .
释放std::vector的内存
vector<float> a;
vector<float>().swap(a);