C++r简单小结

6 篇文章 2 订阅
1 篇文章 0 订阅

vector

1.头文件 #include<vector>
2.如何创建对象
vector<元素类型>变量名

vector<int> a;
	vector<float> b;
	vector<double> c;//只是单纯的定义变量a,b,c
	vector<int>arr(10);//定义了10个整形元素的向量,但没有给出初始值,其值是不确定的
	vector<int>st(10, 1);//定义了10个整形元素的向量,且每个元素的初始值都是1
	vector<int>sq(st);//用st向量来创建sq向量,整体复制性赋值


	int k[10] = { 1,2,3,4,5,6,7,8,9,10 };
	vector<int>sp(k, k + 10);//从数组中获得初始值
	for (int i = 0; i < sp.size(); i++)
		cout << sp[i] << " ";//结果1 2 3 4 5 6 7 8 9 10
	cout << endl;
	for (int i = 0; i < st.size(); i++)
	cout << st[i];

		cout << endl;//	结果:1111111111
	for (int i = 0; i < sq.size(); i++)

		cout << sq[i];//	结果	1111111111
	cout << endl;

3.vec.push_back(a);尾部插入元素
4.vec.pop_back();尾部删除元素

vector a;
for (int i = 0; i < 10; i++)
a.push_back(i);
for (int i = 0; i < 10; i++)
cout << a[i] << " ";//结果:0 1 2 3 4 5 6 7 8 9
cout << endl;
a.pop_back();//删除向量中最后一个元素
a.pop_back();
a.pop_back();
a.pop_back();
for (int i = 0; i < a.size(); i++)
cout << a[i] << " ";//结果:0 1 2 3 4 5
cout << endl;

5.插入元素: vec.insert(vec.begin()+i,a);在第i个元素后面插入a;
vector a;
for (int i = 0; i < 10; i++)
a.push_back(i);
for (int i = 0; i < 10; i++)
cout << a[i] << " ";//结果:0 1 2 3 4 5 6 7 8 9

cout << endl;
a.insert(a.begin() + 3, 99);
for (int i = 0; i < a.size(); i++)
	cout << a[i] << " ";// 结果:	0 1 2 99 3 4 5 6 7 8 9

6.vec.erase(vec.begin()+i,vec.begin()+j);删除区间[i,j-1];区间从0开始
补充:a.erase(a.begin());//删除向量的第一个元素
a.erase(a.end() - 1);//删除向量的最后一个元素
a.erase(pos);//删除pos位置的元素
a.begin() 可以理解成向量中第一个元素的地址
a.end() 理解成向量中最后一个元素的地址的下一位


```cpp
vector<int> a;
	for (int i = 0; i < 10; i++)
		a.push_back(i);
	for (int i = 0; i < 10; i++)
		cout << a[i] << " ";//结果:0 1 2 3 4 5 6 7 8 9

	cout << endl;
	a.insert(a.begin() + 3, 99);
	for (int i = 0; i < a.size(); i++)
		cout << a[i] << " ";// 结果:	0 1 2 99 3 4 5 6 7 8 9
	cout << endl;
	a.erase(a.begin() + 2, a.begin() + 6)//删除的是下标2到5的元素(起始位置是0);
	//a.erase(a.begin() + 2, a.end()-1);
	for (int i = 0; i < a.size(); i++)
		cout << a[i] << " ";//结果:0 1 5 6 7 8 9
	cout << endl;

7.a.clear(); //清空a中的元素
8.a.empty(); //判断a是否为空,空则返回ture,不空则返回false
9.(20)a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<
比较的规则符合字典数排序
10.a.front():向量的第一个元素  a.back()向量的最后一个元素
##  常见库函数
1.**reverse**函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值
交换vector容器中元素的顺序
交换vector容器中元素的顺序(不能交换数组 和字符串)

```cpp
vector<int>a = { 1,2,3,4,5,6 };
	for (int i = 0; i < a.size(); i++)
		cout << a[i] << " ";//结果:1 2 3 4 5 6

	cout << endl;
	reverse(a.begin(), a.end());
	for (int i = 0; i < a.size(); i++)

		cout << a[i] << " ";// 	结果:6 5 4 3 2 1
	cout << endl;
	string b = "abcdefg";
	for (int i = 0; i < b.size(); i++)
		cout << b[i] << " ";
	cout << endl;
	reverse(b.begin(), b.end());
	for (int i = 0; i < b.size(); i++)
		cout << b[i] << " ";
	cout << endl;

2.unique 去重

该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素
(1) 这里的去除并非真正意义的erase,而是将重复的元素放到容器的末尾,返回值是去重之后的尾地址。
(2) unique针对的是相邻元素,所以对于顺序顺序错乱的数组成员,或者容器成员,需要先进行排序,可以调用sort()函数

vector<int>a = { 1,2,2,2,3,3,3,3,3,4,4,4,5,5,5,6,6,6 };
	//vector<int>a = { 1,2,3,2,1,3,2,1,3,2,1,3,4,5,6,7,2 };这样去重是不可以的,因为没有排好序,这样的操作很有问题
	for (int i = 0; i < a.size(); i++)
		cout << a[i] << " ";//结果:1 2 2 2 3 3 3 3 3 4 4 4 5 5 5 6 6 6
	cout << endl;
	int sum = unique(a.begin(), a.end())-a.begin();//
	//去重后的元素:1 2 3 4 5 6 3 3 3 4 4 4 5 5 5 6 6 6但此时返回的元素是        
	//6的下一个地址
	for (int i = 0; i < sum; i++)
		cout << a[i] << " ";//结果:1 2 3 4 5 6
	cout << endl;

再看看去重数组
测试了一下无论是整形数组还是字符型数组还是浮点型数组,这个去重函数都是可以的

int a[] = { 1,2,2,2,2,3,3,3,4,4,4,4,5,5,5 };
	int sz = sizeof(a) / sizeof(a[0]);
	int sum = unique(a, a + sz)-a;
	for (int i = 0; i < sum; i++)
		cout << a[i] << " ";//结果:1 2 3 4 5

	cout << endl;

    char a[] = "aabbccddeeffgg";
	int sz = strlen(a);
	int sum = unique(a, a + sz ) - a;
	for (int i = 0; i < sum; i++)
		cout << a[i] << " ";//结果:a b c d e f g

	cout << endl;
    double a[] = { 1.1,2.2,2.2,3.3,3.3,5.5,5.5,6.6,6.6,7 };
	int sz = sizeof(a) / sizeof(a[0]);
	int sum = unique(a, a + sz)-a;
	for (int i = 0; i < sum; i++)
		cout << a[i] << " ";//结果:1.1 2.2 3.3 5.5 6.6

	cout << endl;


3.sort函数

II)Sort函数有三个参数:

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

int com(int x, int y)
{
	if (x > y)
		return 1;
	else
		return 0;
}
int main()
{
	int arr[] = { 2,332,32,323,32322,834,384 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	sort(arr, arr + sz,com);
	for (int i = 0; i < sz; i++)
		cout << arr[i] << " ";//32322 834 384 332 323 32 2
	cout << endl;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天少点debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值