C++ 动态数组

来源:互联网 发布:ubuntu卸载cuda8.0 编辑:程序博客网 时间:2024/06/05 08:37

在c++中,如果我们需要根据程序的运行,来实现动态数组的分配,要利用指针这个好东东。

1. 指针

动态一维数组:
#include<iostream>
using namespace std;
int main()
{
     int len;
     cin>>len;
     int *p=new int[len];
     delete[] p;
     p = NULL;
     return 0;
}
动态二维数组:
int main()
{
     int row, col;
     cout << "Please enter the number for row and column: " << endl;
     cin >> row >>col;

     //为二维数组开辟空间
     int **p = new int*[row];
     for (int i = 0;  i < row;  i++)
    {
          p[i] = new int[col];
    }

     for (int j = 0;j < row; j++)
     {
          for (int k = 0; k < col; k++)
          {
               p[j][k] = (j + 1) * (k + 1);
               cout << p[j][k] << &p[j][k];
          }
          cout<<endl;
     }

     //释放二维数组占用的空间
     for (int m = 0; m < row; m++)
    {
          delete[] p[m];
    }
    delete[] p;
    p = NULL;
    return 0;
}

2. vector

当然要利用指针也可以实现多维数组,但是利用STL中的vector更简单。

简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。

为了可以使用vector,必须在你的头文件中包含下面的代码:
  #include <vector>
  vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:
  using std::vector;
  vector<int> vInts;
  或者连在一起,使用全名:
  std::vector<int> vInts;
  建议使用全局的命名域方式:using namespace std;

向vector添加一个数据

  vector添加数据的缺省方法是push_back()。push_back()函数表示将数据添加到vector的尾部,并按需要来分配内存。

获取vector中制定位置的数据

  vector里面的数据是动态分配的,使用push_back()的一系列分配空间常常决定于文件或一些数据源。获取vector的大小,可以使用size()。
vector::back()传回最后一个数据,不检查这个数据是否存在。vector::front()
返回一个指向vector容器中第一个元素的引用。

访问vector中的数据

  使用两种方法来访问vector。
  1、 vector::at()
  2、 vector::operator[]
 这两者都可以返回下标为n的元素的引用。但at() 函数 比 [] 运算符更加安全。因为at()进行了边界检查:如果n超过vector中的元素的个数,则会抛出 out_of_range 异常。.因此 at()是我们的首选。

删除vector中的数据

  vector能够非常容易地添加数据,也能很方便地取出数据,同样vector提供了erase(),pop_back(),clear()来删除数据,当删除数据时,应该知道要删除尾部的数据,或者是删除所有数据,还是个别的数据。

ps: stl vector类库等,STL中文手册 可参考http://stl123.net/stl/vector/.