数组为何这么有用?

Lisp只用原子和表就构建了整个世界,其实表和数组是等价的(不完全)。JS的关联数组是红黑树,关联数组并不是C数组的超集,因为C数组可以当成一片连续内存使用。也许有用的不是数组,而是运算符[],C++只用重载[]就实现了数组。[]只是一个函数调用而已,一种函数调用的简写形式。这种简写或者说语法糖非常重要,因为它让代码的可读性更好。[]是一个运算符重载,即a[1]会变换为标准的函数调用operator[](a,1)。再看看其他的运算符,1+2变换为operator+(1,2)。两者的共性是变换,变换就是一种宏。我很早就意识到C++的模板其实是一种宏(这点在我的代码里也可以看出),也就是说宏是模板的超集。现在居然发现运算符重载也是一种宏!我一直以为模板和运算符重载才是C++的精髓,它们构建了整个C++世界。我错了,宏才是C++的根本。难道宏就是世界的终极原子?至少C++的if、for目前还不是宏,我试试能不能把它们变成宏。

时间: 2024-10-14 18:47:48

数组为何这么有用?的相关文章

《JS权威指南学习总结--7.10 数组类型》

内容要点: 一.数组类型 判断它是否为数组通常非常有用.在ES5中,可以使用Array.isArray()函数来做这件事情: Array.isArray([]); //=>true Array.isArray({}); //=>false 二.类数组对象 JS数组的有一些特性是其他对象所没有的: 1.当有新的元素添加到列表中时,自动更新length属性. 2.设置length为一个较小值将截断数组. 3.从Array.prototype中继承一些有用的方法. 4.其类属性为"Arra

Java 多维数组遍历详解

数组是Java中的一种容器对象,它拥有多个单一类型的值.当数组被创建的时候数组长度就已经确定了.在创建之后,其长度是固定的.下面是一个长度为10的数组: public class ArrayDemo { private int arraySize=10; public int[] arrayOfIntegers = new int[arraySize]; } 上面的代码是一维数组的例子.换句话说,数组长度只能在一个方向上增长.很多时候我们需要数组在多个维度上增长.这种数组我们称之为多维数组.为简

学习笔记之三(数组中的一些方法)

这是我在自学过程中看到的一些方法,如果对你有帮助,万分荣幸 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>数组中的方法</title> </head> <body> </body> <script type="text/javascript"> /* * 1.concat()

JS数组整理

1. 检测数组的方法: 1. instanceof[操作符]: var arr = []; console.log(arr instanceof Array);//true 1. instanceof操作符的问题在于,它假定单一的全局执行环境.假如网页中包含多个框架,那就会存在两个以上的全局执行环境,也就意味着存在两个以上的Array构造函数.使用本方法就失灵了 2. ec5新增了isArray();方法用来确定某个值到底是不是数组,忽略全局执行环境的问题 2. 栈方法(push和pop).栈是

多维数组的遍历性能

数组是Java中的一种容器对象,它拥有多个单一类型的值.当数组被创建的时候数组长度就已经确定了.在创建之后,其长度是固定的.下面是一个长度为10的数组: public class ArrayDemo { private int arraySize=10; public int[] arrayOfIntegers = new int[arraySize]; } 上面的代码是一维数组的例子.换句话说,数组长度只能在一个方向上增长.很多时候我们需要数组在多个维度上增长.这种数组我们称之为多维数组.为简

[转] 有趣的JavaScript原生数组函数

在JavaScript中,可以通过两种方式创建数组,Array构造函数和 [] 便捷方式, 其中后者为首选方法.数组对象继承自Object.prototype,对数组执行typeof操作符返回‘object’而不是‘array’.然而执 行[] instanceof Array返回true.此外,还有类数组对象使问题更复杂,如字符串对象,arguments对象.arguments对象不是Array的实例,但却 有个length属性,并且值能通过索引获取,所以能像数组一样通过循环操作. 在本文中,

in查询和两个二维数组的拼接

1.当某个教练查看自己学员的时候,可以通过获取学员身份证号,然后在怎么通过不同的身份证号获取学员的登录名(可用视图实现,userinfo表和studentinfo表进行拼接) 解决: functionarrTostr ($arr)//把二维数组转化为字符串 { foreach ($arr as $v) { $v = join(",",$v); //可以用implode将一维数组转换为用逗号连接的字符串 $temp[] = $v; } $t=""; foreach($

有趣的JavaScript原生数组函数

在JavaScript中,创建数组可以使用Array构造函数,或者使用数组直接量[],后者是首选方法.Array对象继承自Object.prototype,对数组执行typeof操作符返回object而不是array.然而,[] instanceof Array也返回true.也就是说,类数组对象的实现更复杂,例如strings对象.arguments对象,arguments对象不是Array的实例,但有length属性,并能通过索引取值,所以能像数组一样进行循环操作. 在本文中,我将复习一些数

关于对象的行为、数组、继承和类的高级概念

1.对象的行为:                   (1)方法调用栈:所有的方法调用都维护在一个称为调用栈的结构中. 第一个被调用的方法就是main(),该方法是Jvm调用的,因此main()方法总是在调用栈的底部. (2)调用方法:一个方法被调用时该方法就放在调用栈的顶部,知道方法执行完成. 三种情况:①方法返回一个值:一个基本数据类型或一个引用数据类型被传回给方法的调用者: ②方法不返回一个值:返回值被声明为void:  ③方法抛出一个异常给方法的调用者. Java中的方法只能出现在类中,