数据结构动态数组

数组具有固定的容量,我们需要在初始化时指定数组的大小。有时它会非常不方便并可能造成浪费。

因此,大多数编程语言都提供内置的动态数组它仍然是一个随机存取的列表数据结构,大小是可变的。例如,在 C++ 中的 vector,以及在 Java 中的 ArrayList

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // 1. initialize
    vector<int> v0;
    vector<int> v1(5, 0);
    // 2. make a copy
    vector<int> v2(v1.begin(), v1.end());
    vector<int> v3(v2);
    // 2. cast an array to a vector
    int a[5] = { 0, 1, 2, 3, 4 };
    vector<int> v4(a, *(&a + 1));
    // 3. get length
    cout << "The size of v4 is: " << v4.size() << endl;
    // 4. access element
    cout << "The first element in v4 is: " << v4[0] << endl;
    // 5. iterate the vector
    cout << "[Version 1] The contents of v4 are:";
    for (int i = 0; i < v4.size(); ++i) {
        cout << " " << v4[i];
    }
    cout << endl;
    cout << "[Version 2] The contents of v4 are:";
    for (int& item : v4) {
        cout << " " << item;
    }
    cout << endl;
    cout << "[Version 3] The contents of v4 are:";
    for (auto item = v4.begin(); item != v4.end(); ++item) {
        cout << " " << *item;
    }
    cout << endl;
    // 6. modify element
    v4[0] = 5;
    // 7. sort
    sort(v4.begin(), v4.end());
    // 8. add new element at the end of the vector
    v4.push_back(-1);
    // 9. delete the last element
    v4.pop_back();
    system("pause");
}

这里学习一下 auto关键字:auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型

ps:auto 变量必须在定义时初始化,这类似于const关键字。

原文地址:https://www.cnblogs.com/dmndxld/p/10783170.html

时间: 2024-11-12 10:34:02

数据结构动态数组的相关文章

数据结构 动态数组实现

头文件: #pragma once #include<stdlib.h> #include<string.h> struct DynamicArray{ void **data; //数据空间首地址 int capacity;//容量,当前数据空间最大能够容纳多少个元素 int size; //大小,当前数据空间有多少元素 }; #ifdef __cplusplus extern "C"{ #endif typedef int(compare)(void*, v

(2)redis的基本数据结构是动态数组

redis的基本数据结构是动态数组 一.c语言动态数组 先看下一般的动态数组结构 struct MyData { int nLen; char data[0]; }; 这是个广泛使用的常见技巧,常用来构成缓冲区.比起指针,用空数组有这样的优势: 1.不需要初始化,数组名直接就是所在的偏移   2.不占任何空间,指针需要占用int长度空间,空数组不占任何空间.  这个数组不占用任何内存,意味着这样的结构节省空间: 该数组的内存地址就和他后面的元素的地址相同,意味着无需初始化,数组名就是后面元素的地

算法与数据结构基础1:动态数组

恶补算法与数据结构,从很基础的开始,先看动态数组的实现. // array.h #include <iostream> #include <cstring> #include <cstdlib> using namespace std; class Array { public: // ************************************************************************** // 类的四大函数:构造函数.拷贝构

第二十二篇 玩转数据结构——构建动态数组

1.. 数组基础 数组就是把数据码成一排进行存放. Java中,数组的每个元素类型必须相同,可以都为int类型,string类型,甚至是自定义类型. 数组的命名要语义化,例如,如果数组用来存放学生的成绩,那么命名为scores就比较合适. 索引(index)是数组中的一个重要概念,它是我们给数组中的每个元素分配的编号,从0开始,依次递增.如果数组中存放了n个元素,第一个元素的索引是0,最后一个元素的索引是n-1. 通过索引,我们可以对数组中的元素进行快速访问,例如,我们访问索引为2的元素也就是数

从零开始实现数据结构(一) 动态数组

从零开始实现数据结构(一) 动态数组 动态数组是所有数据结构中最简单的一种,甚至在很多的语言中,数组本身就是可以不定长的.因为在学习c++的时候,使用动态数组的各种操作都不是很方便(数据结构的学习最好还是c或c++,基础打好了其他的语言数据结构就很简单).所以开始学习如何去实现一个像STL中的vector一样的动态数组. 创建数组基类CArray 因为后面还准备写一个有序数组,所以这里使用一个CArray类,把数组的各种基本特性先创建好.后面需要写什么数组,就可以写它下面的子类,来完成特殊的功能

nginx学习七 高级数据结构之动态数组ngx_array_t

1 ngx_array_t结构 ngx_array_t是nginx内部使用的数组结构.nginx的数组结构在存储上与大家认知的C语言内置的数组有相似性,比如实际上存储数据的区域也是一大块连续的内存.但是数组除了存储数据的内存以外还包含一些元信息来描述相关的一些信息,并且可以动态增长.下面 我们从数组的定义上来详细的了解一下.ngx_array_t的定义位于src/core/ngx_array.c|h里面. struct ngx_array_s { void *elts;//数组的首地址 ngx_

数据结构学习---堆栈的动态数组实现及链表实现

堆栈 [链表实现堆栈] 优点:可以无限增添元素,只要内存足够, 缺点:内存中存储位置不连续 typedef int ElementType; //只能向头部插入元素,因为如果在尾部插入,删除时,找不到上一个节点/ //因为链表是单向的 //所以 push pop 操作在头结点进行 class Stack{ public: Stack(){ S=(Stack*)malloc(sizeof(Stack)); //建立一个不存数据的头结点,方便增删节点 S->Next=NULL; sz=0; } bo

数据结构入门——动态数组

数组的一大缺点就是长度定义后不能再改变,此程序实现了动态数组,类似于Java中的ArrayList的结构,有增.删.排序.遍历.扩容追加等功能. 动态数组的实现: /* 2013年2月16日19:18:35 此程序将数组中的元素进行追加.删除.排序.遍历输出等操作. 与java中的各方法相同,从而更加深入理解java中的方法. */ # include <stdio.h> # include <malloc.h> # include <stdlib.h> struct

通用型动态数组的总结

基本数据结构之-通用型动态数组 动态数组的应用主要是对于长度未知的数组,先开辟一段空间来存储数据,当空间不够时,在开辟两倍的空间来存储数据 和普通数组的区别就是,我们可以不用关心数组的长度的问题,唯一需要关注的就是数据的类型是自定义数据类型还是基本数据类型,但是不论是基本数据类型还是自定义的数据类型,都需要自定义两个函数,这两个函数时遍历(打印)函数和比较函数,因为,在传递的是地址,没法再里面判断是什么类型,只能交给使用者去定义它的想关的函数, 先说基本的结构: 为了适应更多的数据类型,我们存储