发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
题目起的好吧。
结构类型可以在栈分配空间,而引用类型只能分配指针。
通过数组,结构类型可以分配一个连续的空间和一个指针。
数组结合引用类型只能分配连续的指针,和零散的空间。这是性能问题的一个潜在点。
因此要做序列化的东西,而又比较在意性能,数组结合结构类型是有必要的。
没有指针,可以用下标来访问,也就是枚举数组的元素,需要返回数组本身(指针)和他当前的下标(自然数)两样东西,这没有指针方便,但基本可以满足要求。
问题是,很多数据结构的api并不返回数组和下标,而是返回值本身。如果该值是引用类型,那么还能当指针来使用,如果该值是值类型,那就不能枚举元素了。
也许我们不需要枚举元素,只需要改变元素,提取值类型元素就是克隆一份这种设定,也是性能问题的潜在点。
想返回指针而不是值怎么办?返回可以访问它的对象和访问的方法参数。
如二叉树,节点对象持有值类型,而有两个指针指向左右节点。一般数据结构api返回值,那么你就无法修改该节点的。唯一的方法是你返回该节点。
如数组,节点是值,返回值就无法修改这个节点的值,而需要返回数组,和该节点的下标。
.net自带的类库我们没办法更改,但是要实现高性能的数据结构,就需要考虑提供引用访问的接口,避免无意义的复制。
c#自带的可枚举类型(IEnumerable),枚举器(IEnumerator)类似以上概念,但是返回的当前枚举所持有的值是不可修改的,第二,它是一个遍历用途的工具,从0开始,而不是从你需要使用的项开始。比如你想返回数组第3项,但是可枚举类型会返回一个枚举器,它的下标是从-1开始的。
理想的设计应该类似是:
class Tor<Node,T>{
Node node;
int i;
pubulic T Value{get{return node[i];}set{node[i] = value}}
public bool move(){if(node.Length > i){i++;return ture;}else return flase;};
public Tor(Node n, int index){node = n; i = index);
}
static void main(){
int [] m = {0,1,2,3,4};
Tor<int[],int> t = new Tor(m, 2);
t.Value = 5;
while (t.move) t.Value = 0;
List<int> list = new List<int>(Enumerable.Rangle(0,4));
Tor<List<int>,int> t = new Tor(list, 2);
来自: 昵称10504424 > 《C#》
0条评论
发表
请遵守用户 评论公约
Java 线性表(数组、链表、哈希表、栈和队列)
Java 线性表(数组、链表、哈希表、栈和队列)1. 定义:数组是相同数据类型的元素按一定的顺序排列的集合,是一块连续的内存空间,通过使用整形索引值来访问他们的元素,是最简单,也是使用最广泛的数据...
*p++,(*p)++,*++p,++*p有什么不同
指针 数组
指针 数组指针数组 一个数组,若其元素均为指针类型数据,称为指针数组。一维指针数组的定义形式为:类型名 *数组名[数组长度] 例如: int *p[4] 由于[]比*优先级更高,因此p先与[4]结合,...
C语言关于指针的总结
P是一个指针变量,它指向一个指向整型数据的指针变量指针运算的小结现把全部指针运算列出如下:2) 指针变量赋值:将一个变量的地址赋给一个指针变量。3) 指针变量可以有空值,即该指针变量不指向任何变...
02 常见选择题 typedef 以及查看数据类型
char [10],T为一个char数组。那么T * a中啊为什么类型呢,T * ,T为数组,是一个整体,a为指向这个数组的一个指针喽。首先,a是指针,...
指针数组,数组指针,指针函数,函数指针,二级指针详解
指针数组,数组指针,指针函数,函数指针,二级指针详解。我们有一个识别数据类型的规律例如:int x; //x类型为intint *x;//x类型为int ...
一小时读完剑指offer(全题目精校版)
面试题13:在O(1)时间删除链表结点:当要删除的结点不是尾结点而且不是仅有一个结点的头结点,可以把该结点i的下一个结点j的内容复制到...
算法工程师面试前需掌握的18大面试题!
【IT168 评论】算法是比较复杂又基础的学科,每个学编程的人都会学习大量的算法。3)解释算法的时间复杂度?Skip list数据结构化的方法,...
第十一章 二叉堆
二叉堆是一种特殊的二叉树,但是不是一个二叉搜索树,二叉堆 是计算机科学中非常著名的数据结构,又称堆,由于其高效,快速地查找出最大值和...
微信扫码,在手机上查看选中内容