1、静态数组的基本操作

int a[5] = {0, 3, 4, 6, 2};

1.1 数组的遍历

1.1.1 传统的for循环遍历

int size = sizeof(a) / sizeof(*a);
for(int i = 0; i < size; i++)
cout << a[i] << " ";

sizeof()是一个操作符(operator),返回对象或类型所占内存空间的字节数。

sizeof(a),返回数组a所占内存空间的字节数;sizeof(*a),返回数组a首元素所占内存空间的字节数。两者相除即为数组长度。

1.1.2 C++11基于范围的for循环遍历

for(int& item:a)
cout << item << " ";

for依次循环,item依次作为每个元素的引用。

1.2 数组的sort排序

#include <algorithm>
using namespace std;

sort()包含在头文件<algorithm>中,定义在命名空间std中。

sort(a, a + size);
for(int& item:a)
cout << item <<" ";

sort()可以传入三个参数。第一个参数为要排序数组的首地址,第二个参数为要排序数组的尾地址,第三个参数制定排序类型(从小到大or从大到小)。第三个参数可以省略,默认从小到大排;且第三个参数用起来比较麻烦,若有从大到小的需求,可以先从小到大排,之后倒序输出。

2、基于vector容器的动态数组的基本操作

数组的大小不能发生变化,需要在初始化时指定数组的大小。有时它会非常不方便并可能造成浪费。因此,大多数编程语言都提供内置的动态数组,它仍然是一个随机存取的列表数据结构,但大小是可以发生改变的。例如,在 C++ 中的vector。

#include <vector>

用到vector模板类时,要注意引用头文件<vector>。

2.1 定义及初始化

// 1. initialize
vector<int> v0;
vector<int> v1(5, 0);//v1有5个元素,均为0
// 2. make a copy
vector<int> v2(v1.begin(), v1.end());
vector<int> v3(v2);
// 3. cast an array to a vector
int a[5] = {0, 1, 2, 3, 4};
vector<int> v4(a, *(&a + 1));

定义v4时,传入两个参数a和*(&a+1),两个都是指针。a指向数组的首元素地址,&a为指向数组指针的指针,加一后就直接跨越了一个数组长度,再用*取值后,*(&a + 1)为指向数组尾元素的地址。

2.2 三种遍历方式

cout << "[Version 1] The contents of v4 are:";
for (int i = 0; i < v2.size(); ++i) {
cout << " " << v2[i];
}
cout << endl; cout << "[Version 2] The contents of v4 are:";
for (int& item : v4) {
cout << " " << item;
}
cout << endl; cout << "[Version 3] The contents of v4 are:";
for (auto item = v4.begin(); item != v4.end(); ++item) {
cout << " " << *item;
}
cout << endl;

vector用方括号[]加数字的方式访问内部具体的某个元素。

v.size()返回vector的长度。

v.begin()返回vector的首地址,v.end返回vector的尾地址。

auto自身并不是一种数据类型,其只是一种给对象自动匹配类型的机制。

2.3 排序及在尾部插入、删除

// sort
sort(v4.begin(), v4.end());
// add new element at the end of the vector
v4.push_back(-1);
// delete the last element
v4.pop_back();

v.push_back(x)在vector尾部添加元素x,v.pop_back()删除最后一个元素。

最新文章

  1. 构建Maven聚合工程
  2. JS Number对象
  3. Matlab之findobj()
  4. Qt的QLineEdit显示密码
  5. Tomcat(.jsp)
  6. Kafka 源代码分析之LogManager
  7. jenkins,SVN构建总是clean目录,回归失败
  8. Flutter 即学即用系列博客——04 Flutter UI 初窥
  9. 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager
  10. uvaLive7303 Aquarium (kruskal)
  11. centos install jdk
  12. The Moon and Sixpence摘抄
  13. WCF透明代理类,动态调用,支持async/await
  14. Linux:FHS标准
  15. unity3D 中的C#脚本一个类调用另一类中简单方法
  16. 奇怪问题之@RequestBody问题
  17. MySQL基础之 日期时间函数
  18. [机器学习&amp;数据挖掘]SVM---软间隔最大化
  19. 分享一个VS2008漂亮的黑色主题
  20. 2017年软件工程作业-“Hello World!”团队互评beta版本

热门文章

  1. Spring boot 去除URL 里的 JSESSIONID
  2. git 删除文件 、只删除远程仓库文件、更换远程仓库
  3. go之web框架 iris
  4. GIS地理工具案例教程——批量合并影像
  5. 峰回路转的提权08r2服务器
  6. Angular中使用ECharts图表
  7. percona mysql5.7进程出现大量unauthenticated user解决记录
  8. WPF ContextMenu DataTemplate MenuItem Visibility 问题
  9. 深入Resource实现多语言支持的应用详解
  10. 006-guava 集合-集合工具类-集合扩展工具类