【C++】数组及基本操作


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常用函数汇总

  1. push_back 在数组的最后添加一个数据
  2. insert 增加
  3. pop_back 去掉数组的最后一个数据
  4. clear 清空当前的vector
  5. erase 删除
  6. at 得到编号位置的数据
  7. front 得到数组头的引用 (begin、end返回的是指针)
  8. back 得到数组的最后一个单元的引用
  9. begin 返回第一个元素的指针
  10. end 返回最后一个元素的指针
  11. size 当前使用数据的大小
  12. max_size 最大可允许的vector元素数量值
  13. capacity vector实际能容纳的大小
  14. empty 判断vector是否为空
  15. swap 交换
  16. 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()); 
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页