0%

C++11

[TOC]

C++11

数组

1. 内置数组

数组大小固定,速度较快

1
2
3
4
# 数据类型   数组名[ 数组大小 ];

int a[40];//一维数组
int a[5][10];//二维数组

2. vector创建数组

长度可变,使用灵活,但效率稍低

  • vector 是使用 new 和 delete 来管理内存的

3. array

array 数组模板 ,在C++11中才支持

  • 长度固定,这里的元素个数不能是变量

  • 长度固定,提供了更好、更安全的接口,执行效率和内置数组相同,可以有效替代内置数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# array<类型名, 元素个数>  数组名;
#include <array>
using namespace std;

void main(){
array<int, 5> myarray = { 1, 2, 3, 4, 5 };
array<int, 5> m = myarray;//支持赋值
array<int, 5> m2(myarray);//支持用一个数组去初始化另一个数组
array<array<int, 5>, 6 > a ;//二维数组

// [] assign some values:
for (i = 0; i < 10; i++)
myarray[i] = i * 10;

// data 成员函数:返回指向array第一个元素的指针
const char* cstr = "Test string";
std::array<char, 12> charray;
memcpy(charray.data(), cstr, 12);

// fill 函数,设置array内部的所有元素为指定值
myarray.fill(5);

// swap 函数:交换两个array的内容,注意两个array必须是相同类型,相同大小
array<int, 5> first = { 10, 20, 30, 40, 50 };
array<int, 5> second = { 11, 22, 33, 44, 55 };
first.swap(second);
}

4. valarray

valarray 面向数值计算的数组,在C++11中才支持

  • 支持很多 数值数组 操作,如求数组总和、最大数、最小数等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream> 
#include <valarray>
using namespace std;

int main(){
valarray<int> a;//长度为0
valarray<double> g(10);//长度为10

valarray<int> hh(a);//初始化
hh = a;//赋值

valarray<float> h(3.14, 10);//长度为10,每个元素为3.14
//与vector相反
# vector<数据类型> name(长度,初值);

int days[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
valarray<int> b(days, 5);//长度为5,用数组初始化valarray
cout << b.sum() << endl;//总和
cout << b.max() << endl;//最大值
cout << b.min() << endl;//最小值

return 0;
}

array&vector&valarray区别

基本上将 vector换成 valarray即可。无非是 valarray侧重于数值运算,因此增加了 max,min,sum 等函数。

array 与内置数组很接近,它的个数是事先给定的,不能更改

-------------本文结束-------------