精华内容
下载资源
问答
  • 数据结构数组

    2019-05-21 22:20:43
    数组有可遍历、可迭代的特性,可以用foreach来实现 数组的最大优点是能快速查询 我们的索引有两种情况:有语意、无语意 我们在插入中间元素的时候把插入位置之后的数字往后移一位的时候我们插入位置的元素实际上...

    数组就是把数据码成一排进行存放

    数组有可遍历、可迭代的特性,可以用foreach来实现

    数组的最大优点是能快速查询

    我们的索引有两种情况:有语意、无语意

     我们在插入中间元素的时候把插入位置之后的数字往后移一位的时候我们插入位置的元素实际上还是存着原来的数字,我们往后移的不是空间而是数字的副本。

    package www.zxx;
    
    public class Array {
    	private int[] date;
    	private int size;
    
    	//带参构造函数
    	public Array(int capacity) {
    		date = new int[capacity];
    		size = 0;
    	}
    
    	//无参构造函数输入的数据实际上是capacity的值
    	public Array() {
    		this(10);
    	}
    
    	//获得数组的size
    	public int getSize() {
    		return size;
    	}
    
    	//获得数组的容量
    	public int getCapacity() {
    		return date.length;
    	}
    
    	//通过已经写好的add函数写一个在开头添加e值的函数
        //好处是add函数已经处理过index数值的溢出问题
    	public void addFirst(int e) {
    		add(0, e);
    	}
    
    	//通过已经写好的add函数写一个在末尾添加e值的函数
    	//好处是add函数已经处理过index数值的溢出问题
    	public void addLast(int e) {
    		add(size, e);
    	}
    
    	//在index位置加入e数值的数
    	//要进行index数值的输入控制
    	public void add(int index, int e) {
    		if (size == date.length) {
    			throw new IllegalArgumentException("Add failed,Array is full");
    		}
    		if (index < 0 || index > size) {
    			throw new IllegalArgumentException("Add failed,Index beyond brode");
    		}
    		for (int i = size - 1; i >= index; i--) {
    			date[i + 1] = date[i];
    		}
    		date[index] = e;
    		size++;
    	}
    
    	//判断e数值在不在数组内
    	public boolean contains(int e) {
    		for (int i = 0; i < size; i++) {
    			if (date[i] == e)
    				return true;
    		}
    		return false;
    	}
    
    	//找数组中为e数值的位置,如果没有输出-1
    	public int find(int e) {
    		for (int i = 0; i < size; i++) {
    			if (date[i] == e)
    				return i;
    		}
    		return -1;
    	}
    
    	@Override
    	//重写tostring方法让System.out.println()能直接输出我们指定的类型
    	public String toString() {
    		StringBuilder res = new StringBuilder();
    		res.append(String.format("Array : size = %d,capacity = %d\n", size, date.length));
    		res.append('[');
    		for (int i = 0; i < size; i++) {
    			res.append(date[i]);
    			if (i != size - 1) {
    				res.append(',');
    			} else {
    				res.append(']');
    			}
    		}
    		return res.toString();
    
    	}
    
    	// 获得index位置的数
    	int get(int index) {
    		if (index < 0 || index >= size)
    			throw new IllegalArgumentException("Get failed.Index beyond brode.");
    		return date[index];
    	}
    
    	// 设置index位置的数为e
    	void set(int index, int e) {
    		if (index < 0 || index >= size)
    			throw new IllegalArgumentException("Get failed.Index beyond brode.");
    		date[index] = e;
    	}
    
    	//删除index位置的元素
    	//返回删除的元素
    	int remove(int index) {
    		if (index < 0 || index >= size)
    			throw new IllegalArgumentException("Get failed.Index beyond brode.");
    		int rec = date[index];
    		for(int i = index ; i < size ;i++) {
    			date[i] = date[i+1];
    		}
    		size--;
    		return rec;
    	}
    	
    	//删除第一个元素
    	public int removeFirst() {
    		return remove(0);
    	}
    	
    	//删除最后一个元素
    	public int removeLast() {
    		return remove(size-1);
    	}
    	
    	//从数组中寻找e数值的值,如果找到删除它
    	public void removeElement(int e) {
    		int index = find(e);
    		if(index != -1) {
    			remove(index);
    		}
    	}
    	
    	//主方法
    	public static void main(String[] args) {
    		Array arr = new Array(20);
    		
    		for (int i = 0; i < 10; i++) {
    			arr.addLast(i);
    		}
    		System.out.println(arr);
    
    		arr.add(1, 100);
    		System.out.println(arr);
    
    		arr.addFirst(-1);
    		System.out.println(arr);
    		
    		arr.remove(0);
    		System.out.println(arr);
    		
    		arr.removeElement(0);
    		System.out.println(arr);
    	}
    }
    

     

    在这里我重写了Array实现了自己的一些方法

    要注意在删除开头的结尾的数值时利用已经写好的remove函数

    还要注意到size这个数值实际上是指向第一个为空的位置

    展开全文
  • 更新:勘误,delete [] 猪 ...当然了,毕竟是别人家的孩子(标准),并不提供类似于 vector 和迭代器类型那些神奇的能力。与 vector的区别在于,数组的长度是固定的。另外呢,指 针还是那个指针

    更新:勘误,delete [] 猪

    我们知道,C语言以及早期的面向结构的语言几乎都支持数组定义,比如整形数组int 女神[2],表示有俩数: 女神[0], 女神[1],她们都是整数。C++ 语言为了效率和兼容考虑,也支持这个。当然了,毕竟是别人家的孩子(标准),并不提供类似于 vector 和迭代器类型那些神奇的能力。与 vector的区别在于,数组的长度是固定的。另外呢,指 针还是那个指针,没有变化。

    C++ Primer快速入门之六:数组和指针
    我们编程时候,尽量使用 vector,避免使用数组和指针。有了vector和她的iterator,以及她带来的众多模板函数,我们编程就方便多了,与C不可同日而语。

    数组使用实例:
    数组的维数首先指定,而且必须在一对方括号 [] 内指定:

    1
    2
    char girl[128] =  {10, 20, 30};
    int boy[] = {7, 8, 9};

    指针的使用:

    每个指针都有一个与之关联的数据类型,它决定了指针所指向的对象类型。例如,一个 int 型指针只能指向 int 型对象。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int           *女神1, *女神2; // 女神们都指向整形int
     
    int           女神3
     
    double        *男神;             // 男神指向双精度类型的变量
     
    int *sp        = 女神3;         // sp就是 女神3的地址
     
    int *        = new int[10];  //猪指针指向一个10个整形数组值
     
    delete [] ;

     

     

    怎么样?都是挺简单的吧,其实数组和指针很简单,要不是非要起一个承上启下的作用,我还真不愿意写她。

     

    本文属原创,转载请注明出处,违者必究

    关注微信公众平台:程序员互动联盟(coder_online),你可以第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友,在线交流编程经验,获取编程基础知识,解决编程问题。程序员互动联盟,开发人员自己的家。

    C++ Primer快速入门之六:数组和指针

    展开全文
  • 上节课我们的例子虽然工作得很好并也使用了一个标准的容器(向量容器),但它还是有个小问题,就是在遍历向量里的各个元素时,我们仍把它视为一个c++数组来对待.刚好我们的向量容器允许使用下标操作符来访问它的各个元素:...

    引言

    上节课我们的例子虽然工作得很好并也使用了一个标准的容器(向量容器),但它还是有个小问题,就是在遍历向量里的各个元素时,我们仍把它视为一个c++数组来对待.刚好我们的向量容器允许使用下标操作符来访问它的各个元素:name[x].

    因为对容器里的各个元素进行遍历是一种十分常见的任务,所以应该有一种标准的方式来做这事,c++标准库提供的各种迭代器(iteraor)就是这么来的.

    迭代器

    迭代器是一种功能非常有限却非常实用的函数,提供一些基本操作符:*, ++, ==, !=, =.通过使用迭代器,当在程序里改用另一种容器的时候就用不着修改那么多的代码了.每一种容器都必须提供自己的迭代器,事实上每种容器都将其迭代器以嵌套的方式定义于内部.

    #include <iostream>
    #include <string>
    #include <vector>
     
    int main()
    {
    	std::vector<std::string> name;
     
    	name.push_back("小甲鱼");
    	name.push_back("小鱿鱼");
     
    	std::vector<std::string>::iterator iter = name.begin();  //迭代器
     
    	while(iter != name.end())
    	{
    		std::cout << *iter << "\n";
    		iter++;
    	}
     
    	return 0;
    }

    name.begin()是让指针指向向量的开始位置,name.end()是判断指针是否到达向量的尾部.

    注意:

    (1)迭代器的真正价值在它们可以和所有的容器配合使用,而使用迭代器去访问容器元素的算法可以和任何一种容器配合使用.

    (2)C++中迭代器有两种,const_iterator和iterator,const_iterator只能用于读取不能修改容器内元素.

    算法案例

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
     
    int main()
    {
    	std::vector<std::string> name;
     
    	name.push_back("Larry");
    	name.push_back("Rola");
    	name.push_back("DingDing");
    	name.push_back("JoyJoy");
    	name.push_back("Mickael");
    	name.push_back("Lucy");
    	name.push_back("LiLei");
     
    	std::sort(name.begin(), name.end());
     
    	std::vector<std::string>::iterator iter = name.begin();  //迭代器
     
    	while(iter != name.end())
    	{
    		std::cout << *iter << "\n";
    		iter++;
    	}
     
    	return 0;
    }

    后期学习安排:

    1、将c++入门这门课的学习笔记做成一个文档,以便平时归纳总结

    2、将所有的示例代码重新自己实现一遍

    3、接下来《数据结构与算法》

     

    学习笔记:https://download.csdn.net/download/qq_30708445/11135557

    课程示例和课后习题代码:https://download.csdn.net/download/qq_30708445/11135564

    展开全文
  • 上节课我们的例子虽然工作得很好并也使用了一个标准的容器(向量容器),但它还是有个小问题,就是在遍历向量里的各个元素时,我们仍把它视为一个c++数组来对待.刚好我们的向量容器允许使用下标操作符来访问它的各个元素:...

    引言

    上节课我们的例子虽然工作得很好并也使用了一个标准的容器(向量容器),但它还是有个小问题,就是在遍历向量里的各个元素时,我们仍把它视为一个c++数组来对待.刚好我们的向量容器允许使用下标操作符来访问它的各个元素:name[x].

    因为对容器里的各个元素进行遍历是一种十分常见的任务,所以应该有一种标准的方式来做这事,c++标准库提供的各种迭代器(iteraor)就是这么来的.

    迭代器

    迭代器是一种功能非常有限却非常实用的函数,提供一些基本操作符:*, ++, ==, !=, =.通过使用迭代器,当在程序里改用另一种容器的时候就用不着修改那么多的代码了.每一种容器都必须提供自己的迭代器,事实上每种容器都将其迭代器以嵌套的方式定义于内部.

    #include <iostream>
    #include <string>
    #include <vector>
    
    int main()
    {
    	std::vector<std::string> name;
    
    	name.push_back("小甲鱼");
    	name.push_back("小鱿鱼");
    
    	std::vector<std::string>::iterator iter = name.begin();  //迭代器
    
    	while(iter != name.end())
    	{
    		std::cout << *iter << "\n";
    		iter++;
    	}
    
    	return 0;
    }

    name.begin()是让指针指向向量的开始位置,name.end()是判断指针是否到达向量的尾部.

    注意:

    (1)迭代器的真正价值在它们可以和所有的容器配合使用,而使用迭代器去访问容器元素的算法可以和任何一种容器配合使用.

    (2)C++中迭代器有两种,const_iterator和iterator,const_iterator只能用于读取不能修改容器内元素.

    算法案例

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    int main()
    {
    	std::vector<std::string> name;
    
    	name.push_back("Larry");
    	name.push_back("Rola");
    	name.push_back("DingDing");
    	name.push_back("JoyJoy");
    	name.push_back("Mickael");
    	name.push_back("Lucy");
    	name.push_back("LiLei");
    
    	std::sort(name.begin(), name.end());
    
    	std::vector<std::string>::iterator iter = name.begin();  //迭代器
    
    	while(iter != name.end())
    	{
    		std::cout << *iter << "\n";
    		iter++;
    	}
    
    	return 0;
    }

     

    后期学习安排:

    1、将c++入门这门课的学习笔记做成一个文档,以便平时归纳总结

    2、将所有的示例代码重新自己实现一遍

    3、接下来《数据结构与算法》

     

    学习笔记:https://download.csdn.net/download/qq_30708445/11135557

    课程示例和课后习题代码:https://download.csdn.net/download/qq_30708445/11135564

    展开全文
  • 注释行数已经破 1000 了)。 <h1>Main 言归正传,上一章</a> 中我们结束了 Object 扩展方法部分,今天开始来解读 Array 部分的扩展方法。其实 JavaScript 中的数组是我最喜欢的类型,能...
  • 首先,hash查找确实,但是对于这题的情况来说,把array put到hash中要花很长时间,普遍情况下,最的实现还是楼下RyanPoy的先sort在search,再次感谢。 附: m=n=1000时 Put array to hashtable use 4,508,...
  • 效率对比 a)、ArrayList对随机访问...c)、主要还是要依据集合的数据结构不同的判断。 记录的存取方式有两种: a)、一种是顺序存储(数组,ArrayList…)可以根据其下标找到对应的记录 b)、另一种是链接存储(LinkedL
  • 对于已经排好序的数组,可以用二分法进行查找,其时间复杂度要比遍历,O(log N)。二分查找算法主要注意边界问题,就很容易实现。其思想就是首先判断查找的数X是大于中间的数还是小于,若大于则查找右边,同时将...
  • std::sort只支持vector,array等迭代器支持随机存取的容器,因为内部是排和堆排 std::list这种不支持随机存取,内部有单独的sort函数,实现是迭代版归并排序 有些排序算法时间复杂度都是受限原数据的排序情况的,...
  • Map是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map是无序的,我们无法决定它的返回顺序,这是因为Map是使用链式hash表来实现的。c++中的实现在C++ STL 中map 采用红黑树实现,可以实现有序的Map.Go...
  • 上节课我们的栗子虽然工作得很好并也使用了一个标准的容器(向量容器),但它还是有个小问题。 就是在遍历向量里的各个元素时,我们仍把它视为一个C++数组来对待。 刚好我们的向量容器允许使用下表操作符来访问...
  • 我们根本不用管a初始的类型是<code>string还是<code>number</code>,直接赋上我们想要的值就行,但是js引擎处理这些无类型的代码却并不轻松,当然这在JIT之前,但是JIT也并不是万能的 <p>...
  • 我有一个256x256个numpy的数据数组,它经常被更改。每次迭代时,我都会拍一张快照来拍电影。...在问题是:有没有加快matplotlib3d曲面绘图的方法,还是有更的python绘图工具?在下面是一些代码...
  • JAVA中的for循环

    2019-10-05 07:12:20
    这种方式优点:写起来方便,不需要再获得迭代器,无论是集合(必须用到泛型,自然通过编译就能检查一部分错误,那么提取速度就,不需要判断是什么类型),还是数组(自然数据类型一致,速度也)都可以用此方法。...
  • 利用了快速枚举NSFastEnumerate,当我们想要改变数组变量中的数据或者删除数组中的数据的时候,不能用for...in... Objective-C中的foreach循环与Java中的类似,在内部是用iterator(迭代器)实现遍历的。而不管是在...
  • 一、迭代算法,复杂度是n按照题目要求,还必须要使用递归的思想,那么打表、迭代就不能用了,岂不是只剩下一种快速幂。脑子里存货不多,我就把以前想的一些东西写一下: 这里仍然要注意一个问题,有些人会简单的用...
  •  将循环次数提升到一百万次的时候,循环ArrayList,普通for循环还是比foreach要一点;但是普通for循环在循环LinkedList时,程序直接卡死。原因:foreach使用的是迭代器结论:需要循环数组结构的数据时,建议使用....
  • jquary基础

    2020-11-19 07:36:48
    轻量级:只有几kb,体积比较小,渲染比较 支持插件扩展 链式调用:隐式迭代 免费开源 jQuary对象和DOM对象 console.dir(元素) 可以检验获取的是jQuery还是DOM jQuary:通过jQUary获取的对象(维数组的形式) $...
  • 无论是刚开始接触面向对象编程的新手,还是打算转移到c#的具有c,c++或者java基础的程序员,都可以从本书中吸取到新的知识。 作译者 john sharp,content master首席技术专家。content master隶属于cm集团,cm集团...
  • 强烈推荐大家使用谷歌商店安装, 这样如果有更新可以自动安装,毕竟咱们的插件更新还是的。 :exclamation:怎么刷 LeetCode? 我是如何刷 LeetCode 的 算法小白如何高效、快速刷 leetcode? 刷题效率低?或许...
  • ①先用快慢指针,当指针到末尾时慢指针刚到中间(不需考虑链表节点数是偶数还是奇数),此时利用慢指针将前半个表和后半个表存起来。 ②翻转后半个表,这里用递归实现,也可以通过迭代实现 ③将翻转后的表和前半个...
  • 默认参数还是函数重载.mp4 18.常量_1.mp4 19.常量_2.mp4 2.FirstCpp.mp4 20.常量_3.mp4 21.常量_4.mp4 22.常量_5.mp4 23.常量_6.mp4 24.内联函数.mp4 25.带内联函数的Stash和Stack.mp4 26.改进的错误检查....
  • 在一小时内学会 C#(txt版本)

    热门讨论 2009-08-19 18:09:37
    3. 超出数组边界的表达式索引值同样不可访问。 4. C# 中没有全局变量或全局函数,取而代之的是通过静态函数和静态变量完成的。 数据类型 所有 C# 的类型都是从 object 类继承的。有两种数据类型: 1. 基本/内建...

空空如也

空空如也

1 2 3 4
收藏数 63
精华内容 25
关键字:

数组迭代快还是