前言
提示:这里可以添加本文要记录的大概内容:
前面我们学习了c++中的相关知识,今天将c++基础知识中的STL讲完,在此之前,先来复习一下数组;
提示:以下是本篇文章正文内容,下面案例可供参考
一、数组的相关应用
1.冒泡排序和选择排序
选择排序
代码如下(示例):
//按照降序排列 #include<iostream> using namespace std; int main(void) { int a[100]; int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (a[j] > a[i]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } for (int i = 0; i < n; i++) { cout << a[i] << " "; } cout << endl; }
冒泡排序
冒泡排序就是每两个数据之间进行比较,相对于选择排序,时间复杂度更大.
//按照降序排列 #include<iostream> using namespace std; const int N = 100; int main(void) { int n; int a[N]; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < n -1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (a[j] < a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } cout << "冒泡排序的结果为:" << endl; for (int i = 0; i < n; i++) { cout << a[i] << " "; } cout << endl; }
二分法查询(折半查询)
我们在对数据进行查询时,尤其是涉及到很多的数据的时候,如果利用循环进行查找的时候,会增大时间复杂度,这个时候利用二分法查询就可以提高效率,例如对所有中国人的信息查询,如果利用for()循环进行查询,则最多可能要查询13亿次,而利用二分法则30次就可以查询完毕.
代码演示:
//按照降序排列 #include<iostream> using namespace std; const int N = 100; int main(void) { int n; int a[N]; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } int mid = (n) / 2; int m; cin >> m;//代表要查找的数; for (int i = 0; i<(n/2); i++) { if (a[mid] == m) { break; } else { if (a[mid] > m) { mid = (mid + 0) / 2; } else { mid = (mid + n - 1) / 2; } } } cout << "数据的位置在第:" << mid + 1 << "位"; cout << endl; }
二、STL之vector;
1.vector部分常用成员函数:
代码如下(示例):
vector之一维数组; #include<iostream> #include<vector> using namespace std; //输出向量中的所有元素 void prtVector(vector<int>a) { for (int i = 0; i < a.size(); i++) { cout << a[i] << " "; } cout << endl; } int main(void) { int n; cin >> n; vector<int>a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } prtVector(a);//调用函数输出动态数组; a.begin(); cout << a.size() << endl;//数组长度; a.resize(2 * n, -1); prtVector(a); a.pop_back(); prtVector(a); a.push_back(3); prtVector(a); a.insert(a.begin(), 10);//在起始位置插入10; prtVector(a); a.erase(a.begin() + 3);//删除第三个位置的元素; prtVector(a); a.clear();//清空数组; }
vector之二维数组;
当题目没有给出二维数组的行数和列数的时候,就可以利用vector来声明动态数组;
第一种方法:
#include<iostream> #include<vector> using namespace std; int main(void) { int a, b;//a行,b列; cin >> a >> b; vector<vector<int> >tv(a, vector<int>(b));//注意> >之间有空格; for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { cin >> tv[i][j]; } } for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { cout << tv[i][j] << " "; } cout << endl; } }
第二种方法:
#include<iostream> #include<vector> using namespace std; int main(void) { int a, b; cin >> a >> b; vector<vector<int>>tv;//定义一个动态二维数组; tv.resize(a);//重置二维数组的行数; for (int i = 0; i < a; i++) { tv[i].resize(b);//重置二维数组列数,其实也可以定义不同的列数; } for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { cin >> tv[i][j]; } } for (int i = 0; i < a; i++) { for (int j = 0; j < b; j++) { cout << tv[i][j] << " "; } cout << endl; } }
一、字符串和字符数组的相关应用
1.字符串
字符串常量是以双引号引用的字符序列,字符串结束符时’\0’,所以字符串实际占用内存字节数比它的长度多一.
1.字符数组
一维字符数组:
定义:char a[10]
二维字符数组:
定义:char a[10][13]
字符数组的初始化:char a[ ]={‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’};
字符数组的重点在字符数组函数的应用:
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<string> #include<cstring> using namespace std; const int N = 80; int main(void) { char s[N], t[N]; scanf("%s%s", s, t); printf("%s", s); cout << s << " " << t << endl; cout << strlen(s) << " " << strlen(t) << endl; strcpy(s, "hello word!"); cout << s << endl; strcpy(t, "i like c++"); cout << t << endl; strcat(s, t);//连接两个字符串; cout << s << endl; string str = s; cout << str; printf("%s", str.c_str());//成员函数c_str将string型数据转换为char型数据; return 0; }
总结
本节讲了STL中的一些基础知识,下一节我们讲指针,熟练地掌握STL中的一些库函数,有助于帮助我们做题.