C++遗珠

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值