C++的Array

就从传统的说起,后边提了一点template。reference:http://www.cplusplus.com/doc/tutorial/arrays/

声明:

int arr [] 而非java习惯的int [] arr。

初始化:

arr = { }

arr = {1, 2, 3}。

或者声明时没有size,则自动分配,即 int arr1 [] = {1, 2, 3, 4, 5}//arr1 的size自动成了5.

或者声明时size大于初始化的,则多余的自动分配默认值(0).但是,如果没有初始化,只在声明时int arr [10],这时候是随机的。

多维数组:

C++是Row-Major的,which means先横着存再竖着存。

int jimmy [3][5];   // is equivalent to
int jimmy [15];     // (3 * 5 = 15)
做parameter时:

实质为传了地址,这就解释了为啥C++传array相当于pass by reference。

也解释了,如果传二维的,不能void pass(int arr [][]),应该是void pass(int arr [][3]).//This is necessary in order for the compiler to be able to determine the depth of each additional dimension.

Library的template:

C++03搞了一个模板出来,引用<array>,声明时不大一样,引用一样,可以整体复制,函数传递不decay为address,另外多了很多method。

之前没有arr.size(), 现在有了,就比如string.length().

例子:

#include <iostream>
#include <array>
using namespace std;

int main()
{
  array<int,3> myarray {10,20,30};

  for (int i=0; i<myarray.size(); ++i)
    ++myarray[i];

  for (int elem : myarray)
    cout << elem << '\n';
}
New:这叫Dynamic memory

还可以用new 来声明数组,比如:

int * foo;
foo = new int [5];
foo指向的是首地址。

删除时:

delete pointer;delete[] pointer;

前者删pointer,后者删了整个new出来的memory chunk。

下面是解决办法。Reference: http://stackoverflow.com/questions/8767166/passing-2d-array-to-function

There are three ways to pass a 2D array to a function:

1, The parameter is a 2D array

int array[10][10];
void passFunc(int a[][10])
{
    // ...
}
passFunc(array);

2, The parameter is an array containing pointers

int *array[10];
for(i = 0; i < 10; i++)
    array[i] = new int[10];
void passFunc(int *a[10]) //array containing pointers
{
    // ...
}
passFunc(array); 

3, The parameter is a pointer to a pointer

int **array;
array = new int *[10];
for(i = 0; i <10; i++)
    array[i] = new int[10];
void passFunc(int **a)
{
    // ...
}
passFunc(array); 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值