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()删除最后一个元素。

C++ 数组和vector的基本操作的更多相关文章

  1. Java数组与vector互转

    Java数组与vector互转 /* Object[] object1 = null ; //数组定义 Vector<Object> object2;//Vector定义 object2 ...

  2. 用vector容器代替数组 ——使用数组初始化vector对象

    在C++中,我们不能用数组直接初始化另一数组,而只能创建新的数组,然后显式的把原数组的元素逐个复制给新的数组. 按照C语言中的做法: const size_t arry_size=6; int int ...

  3. C++中数组和vector

    本文基于邓俊辉编著<数据结构(C++语言版)(第3版)>.<C++ Primer(第5版)>以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出. 一.数组 C++中数组 ...

  4. 混编用到 C++中数组和vector 复习下大学课本

    本文基于邓俊辉编著<数据结构(C++语言版)(第3版)>.<C++ Primer(第5版)>以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出. 一.数组 C++中数组 ...

  5. 获取一个数组(vector)与查找值(value)的差最小绝对值的成员索引的算法

    代码如下: 函数作用:传递进来一个数组(vector),和一个需要查找的值(value),返回与value的差值绝对值最小的vector成员索引,若value不在vector范围中,则返回-1: in ...

  6. C++数组或vector求最大值最小值

    可以用max_element()及min_element()函数,二者返回的都是迭代器或指针. 头文件:#include<algorithm> 1.求数组的最大值或最小值 1)vector ...

  7. C++从array数组向vector向量复制元素的两种方式

    #include <iostream> #include <vector> using namespace std; int main() { const int arr_si ...

  8. (STL初步)不定长数组:vector

    STL是指C++的标准模板库.(存储着一些常用的算法和容器) vector是一个不定长数组.它把一些常用的操作”封装“在vector类型内部. 例如,a是一个vector.1对元素的操作有,可以用a. ...

  9. OAF_开发系列17_实现OAF数组应用Vector / Hashmap / Hashtable / Arraylist(案例)

    20150506 Created By BaoXinjian

随机推荐

  1. Java设计模式之一单例模式

    什么是单例模式 保证一个系统中的某个类只有一个实例而且该实例易于外界访问.例如Windows界面的任务管理器就可以看做是一个单例. 单例模式的使用场景 需要频繁的进行创建和销毁的对象: 创建对象时耗时 ...

  2. JSON HiJacking攻击

    JSON劫持类似于CSRF攻击,为了了解这种攻击方式,我们先看一下Web开发中一种常用的跨域获取数据的方式:JSONP. 先说一下JSON吧,JSON是一种数据格式,主要由字典(键值对)和列表两种存在 ...

  3. JMETER + POST + anti-forgery token

    JMETER + POST + anti-forgery token Looking into XSRF/CSRF Prevention in ASP.NET MVC and Web Pages it ...

  4. 【转】Android检查手机是否被root

    目前来说Android平台并没有提供能够root检查的工具.但是我们可以通过两种方式来判断 手机里面是否有su文件 这个su文件是不是能够执行 但是这两种检查方式都存在缺点. 第一种存在误测和漏测的情 ...

  5. mfc封装cef浏览器 关闭整个窗口程序得时候又重启mfc 应用的程序

    最近使用mfc 做了一个cef得浏览器 多标签得.当使用这个封装得浏览器一段时间之后(超过1分钟2分钟) 当关闭封装得浏览器整个窗体 x得时候,整个窗体又重新弹了出来. 大概现象就是一个exe程序你杀 ...

  6. JVM 启动类加载器2

    在运行期,一个Java类是由该类的完全限定名(binary name,二进制名)和用于加载该类的定义类加载器(defining loading)所共同决定的.如果同样名字(即相同的完全限定名)的类由两 ...

  7. Fixed-Length Frames 谈谈网络编程中应用层(基于TCP/UDP)的协议设计

    http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 (2013-04-27 19:11:00 ...

  8. 关于PHP7的CURL上传文件

    CULR 部分 $url = 'http://localhost/test/curlUploadFile/upload.php'; //处理上传的php文件,根据情况修改 $path='ftp.txt ...

  9. postgresql 查看用户名

    查看当前连接的用户名: foo=#select * from current_user; 或 foo=#select user; 查看所有用户名: foo=#\du 用户管理可以查看之前的博文: ht ...

  10. JDBC DataSource

    What is DataSource? 作为 DriverManager 设施的替代项,DataSource 对象是获取连接的首选方法.实现DataSource 接口的对象通常在基于 Java(TM) ...