ps:更多数据结构知识详见:
常见数组结构与算法
数组:
数组与vector:如果不确定元素的个数,请使用vector。
数组声明:
数组声明:a[d],a是数组名,d是数组的维度(维度必须大于0并且是个常量表达式)
常量表达式:值不会改变并且在编译过程就能得到计算结果的表达式。
//一个对象是不是常量表达式:
const int max = 20; //是常量表达式
const int limit = max+1; //是常量表达式
int size = 15; //不是常量表达式,是普通int而不是const int
const int a = get_size(); //不是常量表达式,a本身是一个常量,但是具体值需要在运行时才能获取
复杂数组的声明:
默认情况下,类型修饰符从右向左依次绑定(从内向外)
int *a[10]; //包含10个指向int类型指针的数组(指针数组)
int (*a)[10]; //指向大小为10的整型数组的指针(数组指针)
int *(&a)[10]; //a是一个数组的引用,数组包含10个指针
数组初始化:
一维数组的初始化:
//静态:
int value[10];
int value[10]={1,2};
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
//动态:
int* array = new int[100];
delete []array;
int* array = new int[100]{1,2}; //初始化前两个元素
delete []array;
二维数组初始化:
//静态:
int a[5][6];
//动态:
int (*arr)[6]= new int[5][6];
delete[] arr;
数组常见操作:
访问数组元素:
double a = b[9];
返回数组的大小:
int a[]={1,2,3,4};
int num = sizeof(a)/sizeof(a[0]);
不允许拷贝和赋值:
int a[]={1,2,3};
int b[]=a; //错误
b=a; //错误
vector初始化:
vector<int> vec; //声明一个int型向量
vector<int> vec(5); //声明一个初始大小为5的int向量
vector<int> vec(10, 1); //声明一个初始大小为10且值都是1的向量
vector<int> tmp;
vector<int> vec(tmp); //声明并用tmp向量初始化vec向量
vector<int> tmp(vec.begin(), vec.begin() + 3); //用向量vec的第0个到第2个值初始化tmp
vector常见操作:
vector常用函数汇总:
- push_back 在数组的最后添加一个数据
- insert 增加
- pop_back 去掉数组的最后一个数据
- clear 清空当前的vector
- erase 删除
- at 得到编号位置的数据
- front 得到数组头的引用 (begin、end返回的是指针)
- back 得到数组的最后一个单元的引用
- begin 返回第一个元素的指针
- end 返回最后一个元素的指针
- size 当前使用数据的大小
- max_size 最大可允许的vector元素数量值
- capacity vector实际能容纳的大小
- empty 判断vector是否为空
- swap 交换
- assign 使用括号内的值设置当前的vector
vector常用函数详解:
1.增加函数
push_back()
insert()
//使用push_back():
vector<int> arr;
for (int i = 0; i < 10; i++){
arr.push_back(i);
}
//使用insert()
v.insert(v.begin(),8); //在最前面插入新元素。
v.insert(v.begin()+2,1);//在迭代器中第二个元素前插入新元素
v.insert(v.end(),3,1);//在迭代器的最后一个元素后增加3个1
v.insert(v.end(),v2.begin(),v2.end());//在迭代器的最后一个元素后增加v2中的数据
2.删除函数
pop_back()
erase()
clear()只能清除vector里面的数据,但是内存空间没有释放,如果要释放内存空间,使用arr.swap(vector<int> ());
//使用pop_back()
arr.pop_back();
//使用erase()
arr.erase(arr.begin()+3); //删除第3位元素
arr.erase(arr.begin()+2,arr.begin()+4); //删除arr里面[2,3)的元素(删除第2个元素)
//使用clear()
arr.clear();
3.遍历函数
at()
front()
back()
begin()
end()
//使用at()
arr.at(3); //vector中第三位的数值
//使用front()和back()
int front = arr.front();
int back= arr.back();
//使用begin()和end()
vector<int>::iterator iter;
iter = arr.begin()+4;
cout << *iter << endl;
//使用begin()实现遍历
for(vector<int>::iterator iter=arr.begin();iter!=arr.end();++iter){
cout<<" "<<*iter;
}
4.判断函数
empty() 返回bool,但是也可以用0,1
//使用empty()
cout << boolalpha; //不设定返回0/1
cout << " arr.empty(): " << arr.empty() << endl;
5.大小函数
size() vector中元素的个数
capacity() vector实际能容纳的大小
max_size() 最大可允许的vector元素数量值
int size = arr.size();
int cap = arr.capacity();
int max = arr.max_size();
6.其他函数
swap()
assign() 使用括号内的值设置当前的vector
//使用swap()
vector<int> arr(4,10);
arr.swap(vector<int> ());
vector<int>().swap(arr);
//使用assign()
vector<int> arr;
vetor<int> first(4,10);
arr.assign(7,3); //分配七个3
arr.assign(first.begin(),first.end());