动态数组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(); //排序

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值