留学资讯 一手掌握

CS编程中数组运用辅导

时间: 2018-07-09 文章来源: 洋蜜蜂

在CS编程中,我们经常使用到数组,因为数组是比较低级别的数据结果,不需要太难的语言,大多数同学都是错误滥用数据来进行编程,但是数据真的适用于任何情况吗?下面洋蜜蜂CS辅导Tutor给大家列举一些例子分析。

在时间和空间方面,数组只是用于访问内存中对象序列的最佳构造然而,它也是一个非常低级别的数据结构,具有巨大的滥用和错误可能性,并且在所有情况下都有更好的替代方案。通过“更好”,我的意思是更容易编写,更容易阅读,更不容易出错,并且速度更快。

数组的两个基本问题是

l 数组不知道自己的大小

数组的名称在最轻微的挑衅时转换为指向其第一个元素的指针

考虑一些例子:

void f(int a [],int s)

{

//做一些事; a的大小是s

for(int i = 0; i <s; ++ i)a [i] = i;

}

int arr1 [20];

int arr2 [10];

void g()

{

F(arr1,20);

F(arr2,20);

}

第二个调用将遍历不属于arr2的内存。当然,程序员通常可以正确地调整大小,但这是额外的工作,并且经常有人犯错误。推荐使用标准库向量的更简单和更简洁的版本:

void f(vector <int>&v)

{

//用v做点什么

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

}

vector <int> v1(20);

vector <int> v2(10);

void g()

{

F(V1);

F(V2);

}

由于数组不知道它的大小,因此不能有数组赋值:

void f(int a [],int b [],int size)

{

a = b; //不是数组赋值

memcpy(A,B,大小); // a = b

// ...

}

void g(vector <int>&a,vector <int>&b,int size)

{

a = b;

// ...

}

向量的另一个优点是memcpy()不会为具有复制构造函数的元素(如字符串)做正确的事情。更多CS课程辅导可以找留学府tutor。

void f(string a [],string b [],int size)

{

a = b; //不是数组赋值

的memcpy(A,B,大小); //a=b

// ...

}

void g(vector <string>&a,vector <string>&b,int size)

{

a = b;

// ...

}

数组在编译时确定的固定大小:

const int S = 10;

void f(int s)

{

int a1 [s]; //错误

int a2 [S]; // 好

//如果我想扩展a2,我将不得不改为数组

//使用malloc()在free store上分配并使用realloc()

// ...

}

对比:

const int S = 10;

void g(int s)

{

vector <int> v1(s); // 好

vector <int> v2(S); // 好

v2.resize(v2.size()* 2);

// ...

}

C99允许本地数组的可变数组边界,但这些VLA有其自身的问题。

数组名“衰减”为指针的方式是它们在C和C ++中使用的基础。但是,数组衰减与继承的交互非常糟糕。考虑:

class Base {void fct(); / * ... * /};

class Derived:Base {/ * ... * /};

void f(Base * p,int sz)

{

for(int i = 0; i <sz; ++ i)p [i] .fct();

}

Base ab [20];

Derived ad[20];

void g()

{

f(ab,20);

f(ad,20); //灾难!

}

在最后一次调用中,Derived []被视为Base [],当sizeof(Derived)!= sizeof(Base)时,下标不再正常工作 - 在大多数情况下都是如此。如果我们使用向量代替,错误将在编译时捕获:

void f(vector <Base>&v)

{

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

}

vector <Base> ab(20);

vector <Derived> ad(20);

void g()

{

f(ab);

f(ad); //错误:无法将向量<Derived>转换为向量<Base>

}

很多的C和C ++中的大量新手编程错误与(错误)使用数组有关。列举到这里相信大家都已经有个大致了解,有时候会有更好的替代方案来有效处理数据结构。

洋蜜蜂辅导机构争当海外留学的引导者,创新式辅导模式与海外名校师资,旨在为学生学有所成,提供各方位的服务,包括课程辅导,选课咨询,写作辅导等服务。

更多课程资讯,详情可点开洋蜜蜂官网即可获得更多,如果有CS课程辅导需求,可以咨询24小时在线客服微信:yuff996,洋蜜蜂助你度过学习难关。