C++r简单小结

C++r简单小结,第1张

STL
  • vector

vector

1.头文件 #include
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.end()+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
vectora = { 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 };
	//vectora = { 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-1)-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 - 1) - 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-1)-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;

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/562247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)

保存