Effective C++ (5) 几个关于数组的问题
来源:互联网 发布:centos 7安装ngrok 编辑:程序博客网 时间:2024/06/05 06:02
1.指针和数组容易产生不可预料的错误。其中一部分是概念上的问题:指针用于低级操作,容易产生与繁琐细节相关的(bookkeeping)错误。其他错误则源于使用指针的语法规则,特别是声明指针的语法。
许多有用的程序都可不使用数组或指针实现,现代C++程序采用vector类型和迭代器取代一般的数组、采用string类型取代C风格字符串。
2.动态数组
动态分配数组时,如果数组元素具有类类型,将使用该类的默认构造函数实现初始化;如果数组元素是内置类型,则无初始化:
string *psa = new string[10]; // array of 10 empty strings int *pia = new int[10]; // array of 10 uninitialized ints
之所以要动态分配数组,往往是由于编译时并不知道数组的长度。我们可以编写如下代码
size_t n = get_size(); // get_size returns number of elements needed int* p = new int[n]; for (int* q = p; q != p + n; ++q) ;
动态数组的释放
动态分配的内存最后必须进行释放,否则,内存最终将会逐渐耗尽。如果不再需要使用动态创建的数组,程序员必须显式地将其占用的存储空间返还给程序的自由存储区。C++语言为指针提供 delete [] 表达式释放指针所指向的数组空间:
delete [] pia;
3.尽量使用前置操作符++
有使用 C 语言背景的读者可能会觉得奇怪,为什么要在程序中使用前自增操作。道理很简单:因为前置操作需要做的工作更少,只需加 1后返回加 1 后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加 1 之前的值作为操作的结果。对于int型对象和指针,编译器可优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。因此,养成使用前置操作这个好习惯,就不必操心性能差异的问题。
分享到新浪微博
- Effective C++ (5) 几个关于数组的问题
- 关于C语言指针数组的几个实例
- 关于C语言的字符数组问题
- c问题---关于数组溢出的思考
- 关于C语言数组的定义问题
- 几个关于嵌入式C的面试问题【转】
- 关于C语言几个关键字问题的总结
- C语言中几个关于初值的问题
- Effective C++ (6) 函数的参数传递
- 关于几个Objective-C数组的块语法(遍历, 升序, 降序, 打乱数组)
- 数组的几个相关问题
- 数组--C语言中关于数组的小问题
- 关于数组问题的一些总结(c/c++)
- 关于几个指针的问题
- 几个关于jsp的问题
- 几个关于内存的问题
- 关于面试常见的一个数组中找出出现一次的几个数字的问题
- 关于JavaScript数组的几个要点
- Effective C++ (1) C++和C中的Const
- Effective C++ (2) C#中的Const和Readonly
- 修改设置eclipse 中java文件和jsp文件字体的大小
- Effective C++ (3) 避免C++头文件的多重包含
- Effective C++ (4) c++中的命名空间
- Effective C++ (5) 几个关于数组的问题
- Effective C++ (6) 函数的参数传递
- Effective C++ (7) 强制类型转换
- Effective C++ (8) 顺序容器vector,list,deque
- 泛型算法
- 第一回 ,如何写 go 代码
- C++模板
- plone安装,配置,备份,转移
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及