- C++笔记(二)【数组】
- 一、数组基础
- 1.1 什么是数组?
- 1.2 初始化一维数组的方法
- 1.3 数组长度
- 1.4 小技巧
- 二、数组排序
- 2.1 冒泡排序
- 2.2 选择排序
- 2.3 插入排序
- 三、数组的插入与删除
- 四、二维数组
- 五、数组的替代品--Vector
- 5.1 定义
- 5.2 常用操作
- 5.3 vector的规范遍历
- 5.4 排序
定义:数组是一个变量,由数据类型相同的一组元素组成,内存中的一串连续的空间,数组长度固定不变。
c++中数组的size是否可以为变量?
int N=4; int nums[N]; //c++中是运行这样的,这是比c强的地方1.2 初始化一维数组的方法
int years[12]={1,2,3,6,7};//没给出来的按默认值0
//让系统自动判断
int days[]={1,15};
//这是不行的,因为没给出提供size的信息
int days[]={};
int days[]
1.3 数组长度
通过sizeof()的方法可以知道数组的长度
#includeusing namespace std; int main() { const int N=3; int nums[N]; for (int i=0;i > nums[i]; } for (int i=0;i using namespace std; int main() { int nums[]={2,3,4,5,6,7,22,4,23,4,45,5,5}; int numsLen=sizeof(nums)/sizeof(int); for (int i=0;i 1.4 小技巧 查找元素时下标默认初始可以设为INT_MIN
二、数组排序 2.1 冒泡排序#includeusing namespace std; int main() { //升序 int nums[]={3,5,2,7,6}; int N=sizeof(nums)/sizeof(int); int tmp; //外层循环控制轮数 for(int i=0;i nums[j+1]){ tmp=nums[j+1]; nums[j+1]=nums[j]; nums[j]=tmp; } } } for(int i=0;i 2.2 选择排序 #includeusing namespace std; int main() { //升序 int nums[]={2,5,3,8,7}; int N = sizeof(nums)/sizeof(int); //擂台变量,用来临时存每一轮的最小值 int min; int minIndex; //外循环只需要进行数组的大小减一次 for(int i=0;i i){ nums[minIndex]=nums[i]; nums[i]=min; } } for(int i=0;i 2.3 插入排序 #includeusing namespace std; int main() { int nums[]={3,5,4,1,8}; int N = sizeof(nums)/sizeof(int); //用来放每一轮待插入的数 int tmp; for(int i=1;i -1;j--){ if(tmp>nums[j]){ nums[j+1]=tmp; break; } //若tmp小于前面的数则前面元素后移 nums[j+1]=nums[j]; //若tmp是最小的数 if(j==0){ nums[j]=tmp; } } } for(int i=0;i 三、数组的插入与删除 由于是静态数组要想插入之类的操作得预留一些空间,第一开始定义时候就大一点。但是如int nums[9999];这样定义时候要注意合适的大小,一个整型占4个字节,40000B约为40MB的内存空间,所以还是要注意的。
#includeusing namespace std; int main() { double nums[99]={34,556,33,21,89}; int N=5; double tmp; //插入的下标,注意这里初值很重要,要是没找到则插入在最后一个位置 int insertIndex=N; //插入的数 double insertNum; for(int i=0;i nums[j+1]){ tmp=nums[j+1]; nums[j+1]=nums[j]; nums[j]=tmp; } } } for(int i=0;i > insertNum; //因为此时已经是有序的,找到第一个插入的数大的位置 for(int i=0;i insertNum){ insertIndex=i; break; } } //从最后一个元素开始挪位置 for(int j=N-1;j>=insertIndex;j--){ nums[j+1]=nums[j]; } //插入数字 nums[insertIndex]=insertNum; N++; for(int i=0;i 四、二维数组 double nums[4][5]; cin >> nums[3][4]; //也可以不完全写出具体的元素 int a[3][4] = {1,2,3,4,5,6} int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //标准定义的方法 int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};五、数组的替代品–Vector 5.1 定义头文件要包含#include
vector 是一个快速的动态分配内存的数组,实际上是一个模板类
大小可以动态扩展。可以插入和删除元素。
定义方式
vector5.2 常用操作vec1; //尖括号代表泛型 vector vec2(5); vector vec3(20,4);//二十个元素每个元素都是4 这里面的pos都是迭代器,不是普通的下标
函数 解释 clear() 移除容器中所有数据 empty() 判断容器是否为空 size() 返回容器中元素的个数 [index],at(index) 返回索引为index的元素 erase(pos) 删除pos处的元素 erase(beg,end) 删除beg到end区间的数据 front() 返回第一个元素 insert(pos,elem) 在pos插入元素 pop_back() 删除最后一个元素 push_back(elem) 在容器末尾插入一个元素 resize(num) 重新设置容器的大小 begin(),end() 返回容器首尾元素的迭代器 #include5.3 vector的规范遍历#include #include using namespace std; int main() { vector nums1={6,452,45,2,1,9}; nums1.insert(nums1.begin()+2,99); for(it=nums1.begin();it!=nums1.end();++it){ cout << *it << endl; } //结果 6, return 0; } #include5.4 排序#include using namespace std; int main() { vector vec1={2,3,4}; vec1.push_back(3); //这种遍历方法不专业 for(int i=0;i ::iterator it;//得到double类型的迭代器对象 ,实际上是一个指针对象 for(it=vec1.begin();it!=vec1.end();++it){ //it++或者++it 这里是运算符重载了,因为it是迭代器对迭代器加加,另外it++这样写会导致缓存的增加效率不高,虽然效果相同 cout << *it << endl; //因为是指针,用*取值 } return 0; } #include#include #include using namespace std; int main() { vector nums1={6,452,45,2,1,9}; vector ::iterator it; //排序 sort(nums1.begin(),nums1.end()); for(it=nums1.begin();it!=nums1.end();++it){ cout << *it << endl; } cout << "逆序" << endl; //逆序 reverse(nums1.begin(),nums1.end()); for(it=nums1.begin();it!=nums1.end();++it){ cout << *it << endl; } return 0; }



