C++遗珠

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fb_help/article/details/85881005

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
请按任意键继续. . .


展开阅读全文

没有更多推荐了,返回首页