一、内置复合类型数组
1. 数组声明方式
typeName arrayName[arraySize];
数组声明必须指明:
- 存储在数组中每个元素的类型(typeName);
- 数组名称(arrayName);
- 数组大小(arraySize),必须是整型常数或者常数表达式。
2. 数组初始化
- 数组只能在定义的时候初始化。
int arr[4] = {1, 2, 3, 4};
- 初始化数组时,提供的值可以少于数组的元素个数。编译器会把其他元素设置为0。
int arr[4] = {1}; //arr[0]=1, arr[1]=0, arr[2]=0, arr[3]=0
- 如果初始化数组时没有指定元素个数,编译器会计算元素个数。
int arr[] = {1, 2, 3, 4}; int arrSize = sizeof(arr)/sizeof(int); //4
二、C++11新增的模板类array
array是C++11新增的模板类,在<array>
头文件中声明,它对数组进行了封装,是长度固定的数组。array中提供一些符合STL标准的方法,使得STL算法可以运用于array对象。
- array对象的创建方式
array<int, 5> ai; //创建一个有5个int型元素的数组 array<double, 4> ad = {1.2, 3.4, 5.6, 6.7}; //列表初始化,C++11新特性
- array常用函数
函数 功能 void assign(const T& value) 将容器中所有元素赋值为value。 void fill(const T& value) 将容器中所有元素填充为value。 void swap(array& x) 交换调用对象与x中所有元素。 iterator begin() 返回第一个元素对应的迭代器 iterator end() 返回最后一个元素下一个位置的迭代器 size_type size() const 返回array对象的元素个数 size_type max_size() const 返回array对象可容纳的元素个数,值与size()相同 bool empty() const 此函数只会返回false reference at(size_type pos) 返回pos位置元素的引用,提供越界检查 reference front() 返回第一个元素的引用 reference back() 返回最后一个元素的引用 T* data() 返回array对象地址,即array对象第一个元素地址
三、STL模板中的数组vector
vector模板类在<vector>
头文件中声明,是数组的一种类表示。它提供了自动内存管理功能,可以动态的改变vector对象的大小,并随着元素的添加和删除而增大和缩小。
- vector创建对象的方式
// 创建一个空vector对象 vector<int> vi; // 定义一个大小为10,元素值都为1的vector。 vector<int> vi1(10, 1); // 定义一个大小为10,元素值为0的vector。没有给定初始值,会调用元素类型的默认构造函数生成对象。 vector<int> vi2(10); // 使用初始化列表(initializer_list)初始化vector(C++11新特性)。 vector<int> vi3 = { 1, 2, 3, 4, 5 }; // 用已有vector中数据初始化。 vector<int> vi4(vi3.begin()+1, vi3.end());
- vector常用函数
函数 功能 void push_back(const T& val) 在最后一个元素后面插入val void pop_back() 删除最后一个元素 iterator insert(itetator pos, const T& val) 在pos位置的元素前插入val iterator insert(iterator pos, size_type n, const T& val) 在pos位置的元素前插入n个值为val的元素 iterator insert(iterator pos, iterator first, iterator last) 在pos位置的元素前插入区间[first, last)中的元素 void resize(size_type n) 重置vector对象大小。多删少补,补T()。 void resize(size_type n, const T& val) 重置vector对象大小。多删少补,补val。 void reserve( size_type n) vector对象的容量小于n时扩充到n iterator erase(iterator pos) 删除pos位置的元素 iterator erase(iterator first, iterator last) 删除区间[first, last)中的元素 void clear() 清空所有元素 vector& operator=(const vector& x) 赋值运算符重载 void assign(size_type n, const T& val) 赋n个值为val的元素到vector中 void assign(iterator first, iterator last) 将区间[first, last)中的元素赋值给vector void swap(vector& x) 交换调用vector对象与x中的元素 T* data() 返回vector对象中第一个元素的地址 bool empty() 判断vector是否为空(返回true时为空) size_type size() const 返回vector对象的元素个数 size_type max_size() const 返回容器所能容纳的最大数目的元素个数。这是系统的限制,容器不一定能达到该大小。 size_type capacity() const 返回vector对象容量 iterator begin() 返回第一个元素的迭代器 iterator end() 返回最后一个元素下一个位置的迭代器 T& at(size_type pos) 返回pos位置元素的引用 ,提供越界检查 T& front() 返回第一个元素的引用 T& back() 返回最后一个元素的引用