`
lovnet
  • 浏览: 6881527 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

动态数组vector和List

 
阅读更多

静态数组的缺点

数组是我们用的非常多的一种数据结构.存储一组对象时首先想到的就是用它.它的优点一个是因为在内存中连续分配,所以通过下标索引访问非常快.二个是使用简单,取值赋值修改都很方便.

C++中我们一般像这样定义一个数组int NumArr[] = {1,2,3}; //或者int NumArr[3] = {1,2,3};

而C#中是这样int[] NumArr = {1,2,3};

静态数组最大的缺点就是定义的时候大小是固定了的(显式指定大小,或者编译器通过赋值元素数量推算出具体大小).这样一来我们要存储一些大小不固定的一组对象时就麻烦的.一个比较笨的办法是预先做下估计,然后定义个比较大点的数组.这样很容易造成内存浪费.而且特殊情况下保存的数据仍然会超出数组的范围.

动态数组

针对数组大小固定的缺点弄出了个动态数组.在C++的STL中叫vector ,在C#中叫List.两者都有用到泛型技术.

动态数组涉及到的主要操作主要是:赋值(添加),插入,查询,删除,遍历,排序

C++ STL中vector用法

引用头文件

#include <vector>

#include <algorithm>

using namespace std;

vector<int> vec; //定义一个int型的动态数组

vec.push_back(1); //往数组中添加元素1,不知道为啥不用个add来代表添加元素

vec.push_back(2);

vec.push_back(4);

vector<int>::iterator it = vec.begin(); //iterator迭代器可以简单理解为类似指向元素位置的指针.这里表明是起始位置

vec.insert( it + 2, 3); // 在第三个元素前面插入3,也就是要在4前面插入3.

int num = vec[2]; //num的值为3

num= vec.at(2); //num的值为3

///////////////////三种遍历数组的方法////////////////////////////////////////////////

for(vector<int>::size_type i = 0; i < vec.size(); i++) //遍历整个数组 ,方法1

cout<<vec[i]<<endl;

for(it = vec.begin(); it != vec.end(); it++) //遍历整个数组 ,方法2

cout<< *it <<endl;

for_each(vec.begin(), vec.end(), Show); //遍历整个数组 ,方法3

//函数Show一定义如下

//void Show(const int num){ cout<<num<<endl;}

/////////////////////////////////////////////////////////////////////////////////////////

vec.pop_back(); //删除数组最后一个元素

it = vec.begin(); //因为前面迭代器操作过后会失效,需要重新赋值.

vec.erease(it + 1); //删除指定位置元素

vec.clear(); //删除所有元素

sort(vec.begin() , vec.end()); //排序

C#中List用法

实际上C#中还有个叫arraylist的动态数组,但没有用到泛型技术,数组里面只能保存一个个的object类型,需要自己去做些类型转换.

引用命名空间

using System.Collections.Generic

List<int> array = new List<int>();

array.Add(1); //添加元素

array.Add(2);

array.Add(4);

for (int i = 0; i < array.Count; i++) //遍历整个数组,方法1

Console.WriteLine(array[i]);

List<int>.Enumerator it = array.GetEnumerator(); //遍历整个数组,方法2

while (it.MoveNext())

Console.WriteLine(it.Current);

foreach (int item in array) //遍历整个数组,方法3

Console.WriteLine(item);

array.Insert(3, 3);

int num = array[2]; //结果为3

array.RemoveAt(2); //删除索引为2的元素

array.Clear(); //清除所有元素

array.Sort(); //排序

分享到:
评论

相关推荐

    C++Builder动态对象数组

    ### C++Builder动态对象数组:TList类、DynamicArray与STL中的Vector容器 #### TList 类 在C++Builder中,TList是用于管理动态对象数组的一种方式。它提供了较为简便的方式来创建、管理和销毁一系列对象。TList...

    树tree、动态数组dyArray、hashMap、拼图算法.zip

    在C++中,通常使用`std::vector`来实现动态数组;在Python中,列表(list)就是动态数组的代表。动态数组的优势在于其灵活性,但插入和删除操作可能涉及元素的移动,因此在性能上不如静态数组。 3. **哈希映射...

    Arduino-List:实现动态数组的Arduino库

    Arduino列表库Arduino库,实现了一个动态大小的数组,即一个可以添加或删除元素的集合,并且该集合根据存储的元素数量来增加或减少其容量。 更多信息使用说明List类的操作与C ++中的Vector类相似,但是其实现方式很...

    *****关于动态数组的创建****

    - **容器类实现**:许多高级编程语言中的容器类(如C++的std::vector或Java的ArrayList)都是基于动态数组实现的。 6. **注意事项** - **边界检查**:在操作动态数组时,务必进行边界检查,避免越界访问导致程序...

    zz.zip_动态数组输出相反

    动态数组,又称为可变大小数组或向量,在C++中表现为`std::vector`,在Python中是`list`等,它们在内存中分配连续的空间来存储元素,与静态数组不同,静态数组在声明时必须指定固定大小,而动态数组可以根据需要增加...

    数据结构动态数组实现链表

    在C++中,通常使用`std::vector`来实现动态数组;在Python中,内置的列表就是动态数组。 动态数组实现链表的核心思想是利用动态数组的特性来模拟链表的行为。下面我们将详细讨论这个实现过程: 1. **节点表示**:...

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...

    2.1.1 C++和C#数据传递 -常用类型数组和List类型传递

    然而,C++的STL(标准模板库)提供了`std::vector`,它是动态数组的容器,类似于C#的List。在传递`std::vector`时,可以使用引用或指针,以确保对原始数据的修改能够被外部观察到。 ```cpp #include &lt;vector&gt; void...

    C++动态数组

    C++中的动态数组是一种在程序运行时分配内存的数组,其大小可以由用户输入或者程序在运行过程中计算...而对于多维数组的动态实现,选择适合的指针和new方式或使用vector的嵌套可以解决多维动态数组的创建和管理问题。

    C++ STL开发技术导引(第5章)

    1.1 类和对象 2 1.2 类的继承 5 1.3 函数重载 5 1.4 访问控制 7 1.5 操作符重载 8 1.6 显式类型转换 9 1.7 异常处理 13 1.8 名字空间 17 1.9 友员函数 20 1.10 内联函数 21 1.11 静态成员 22 ...

    vector list map pair stl 标准模板库 c++

    - `vector`是一种动态数组,允许在任何位置插入和删除元素。它的元素是连续存储的,因此可以通过下标访问元素,类似于C语言的数组。 - `push_back()`和`pop_back()`用于在末尾添加或移除元素。 - `insert()`和`...

    动态数组DanymicArray

    这个概念在很多编程语言中都有实现,如C++的`std::vector`,Java的`ArrayList`,Python的`list`等。下面将详细讨论动态数组的实现原理以及在给定的两个文件`DynamicArray.java`和`DynamicArray2.java`中可能采用的...

    在vector和list中插入数据

    `std::vector`是一个动态数组,提供了随机访问的能力。它的插入操作主要有以下几种: 1. **在末尾插入元素**: `push_back(Elem)` - 这是最常见的插入方式,向vector的末尾添加一个元素,时间复杂度为O(1),但如果...

    比较Java数组和各种List的性能小结

    在Java编程中,数组和List接口的实现(如ArrayList、LinkedList和Vector)是两种常见的数据结构,它们各自具有不同的特点和性能。这篇文章将探讨这些结构在随机访问、迭代、插入和删除操作上的性能差异。 首先,...

    CStringArray二维数组

    在深入探讨 `CStringArray` 与二维数组的应用之前,我们首先简要了解一下 `CStringArray` 和其在 C++ 中的基本概念。 #### 一、CStringArray 概述 `CStringArray` 是 MFC(Microsoft Foundation Classes)中的一个...

    数组排序 list

    与传统的数组不同,`list`中的元素可以方便地插入和删除,而不必关心它们在内存中的相对位置。这使得`list`在处理动态变化的数据集时特别有用。 在`list`中进行排序,我们可以借助STL的另一个强大工具——`sort`...

    基于JAVA实现的常用数据结构代码,JAVA实现复杂度、动态数组、链表、栈、队列、二叉搜索树等

    不同于固定大小的数组,动态数组可以在需要时自动扩展其容量,提供便利的添加、删除和查找元素的操作。然而,插入和删除操作在非尾部位置可能会导致数组内部元素的重新排列,因此它们的时间复杂度通常为O(n)。 3. *...

    C++STL vector list map set dqueue 等应用举例及PPT讲解示例,代码演示

    1. **vector**:vector是动态数组,它可以方便地在任何位置插入和删除元素,但主要操作发生在末尾,因为这样效率最高。vector的优点在于随机访问速度极快,适合用于需要快速访问和修改元素的场景。例如: ```cpp #...

    C++ STL vector 容器介绍

    在STL中,`vector`是一种非常重要的容器,它是一个动态数组,允许在任意位置进行元素的插入和删除,并能保持元素的顺序。 `vector`容器的主要特点包括: 1. 动态数组:`vector`的底层实现是一个动态数组,这意味着...

    数据结构--数组、单链表和双链表介绍以及双向链表 数组和链表.pdf

    动态数组是指数组的容量能动态增长的数组,C语言需要手动实现,而C++的STL提供了Vector。 二、单链表 单链表是一种链表的变种,由节点组成,每个节点都包含下一个节点的指针。单链表的特点是: * 节点的链接方向...

Global site tag (gtag.js) - Google Analytics