C++STLvector

一、构造函数

1)、vecto<T> v; //创建一个空的vector<T>对象,这个对象的元素的类型为T,T是需要指定的。

2)、vector<T>  v(n); //创建一个vector<T>对象,v.size()为n, 每个元素的值都会是系统默认的值,如果T是类,就会是默认构造函数来初始化。

3)、vector<T> v(n, value);//跟第二个差不多,区别就是初始化不是默认值,而是用指定的value值来初始化这N个元素

4)、vector<T> v(iter1, iter2);//用迭代器来指定一个范围内的元素来初始化。如:

          vector<int> v;
          for (int i = 1; i <= 10; i++)
                 v.push_back(i);
          vector<int> v1(v.begin(), v.end());

二、常用的操作

v.push_back(value);//把value放到对象v的末尾

v.pop_back(); //把对象v的末尾的值删除,并缩减其容量

v.capacity();//返回v的容量

v.max_size();//返回v最大可以存放的元素的个数

v.size();//返回v中元素的个数

v.empty();//如果v中元素个数为0,那么就返回true,否则返回false

v.reserve(n, value);//设置v的容量为n,那么原来如果为m, m < n, 则m-n这些元素都用value来初始化

v.front();//返回v的第一个元素

v.back();//返回v的最后一个元素

v1.swap(v2);//交换v1\v2的内容

v.clear();//清空所有元素,并将其容量变为0

v.begin();//返回指向第一个元素的迭代器

v.end();//返回指向最后一个元素之后的迭代器

v.rbegin();//返回指向最后一个元素的迭代器

v.rend();//返回指向第一个元素之前的迭代器

v.insert(iterator, value);//在迭代器iterator指向的元素之前插入value

v.insert(iterator, n, value);//在迭代器iterator指向的元素之前插入n个value

v.earse(iterator);//删除迭代器iterator指向的元素删除掉

v.earse(iteBegin, iteEnd);//删除两个迭代器指定的范围内的元素

v[i] //像数组一样来访问元素,但是不会进行越界检查,跟数组一样不检查的

v.at(i);//返回v中下标为i的元素。这个成员函数会起先越界检查,如果越界会抛出out_of_range

如:

try

{

        for (int i = 0; i <= v.size(); i++)

              cout << v.at(i) << " ";

 }

catch (out_of_range)

{

        cout << "out of range" << endl;

}    

//那么这里就是输出out of range.


三、重载的运算符

1、 v1 = v2; //调用复制构造函数来完成赋值

2、v1 == v2; //按字典顺序来比较,如果相等,返回true。下面的几个也一样的道理

3、v1 < v2;

4、v1 > v2;

5、v1 != v2


四、迭代器部分

1、定义一个迭代器,有const的是用const限定的迭代器,不允许修改通过*来修改其值,

      有reverse的是逆序迭代器

  vector<int>::iterator it = v.begin(); //

  vector<int>::const_iterator cit = v.begin();

  vector<int>::reverse_iterator rit = v.rbegin();

  vector<int>::const_reverse_iterator crit = v.rbegin();


这样定义以后可以执行以下操作:

++it 、--it、*it、=、 == 、 !=、+、-、【】


顺序输出元素:

for (vector<int>::const_iterator cit = v.begin(); cit != v.end(); cit++)

       cout << *cit << " ";

cout << endl;


逆序输出元素:

for (vector<int>::const_reverse_iterator crit = v.rbegin(); crit != v.rend(); crit ++)

     cout << *crit << " ";

cout << endl;


五、创建二维vector对象

1)、const int ROWS = 3, COLUMNS = 4;

vecotor< vecotr<double> > table(ROWS,  vector<double> (COLUMNS, 0.0));

//创建了一个3*4的矩阵,其中的vector<double> (COLUMNS, 0.0);是创建一个临时对象,其元素个数为COLUMNS, 每个元素值为0.0;

2)、单下标访问

table[0];//这是第一行

3)、双下标

table[0][0];//table 表中的第一行第一列对象的元素

4、size()方法

table.size();//返回的是行数

table[r].size();//返回的是列数

5、遍历二维表

for (int row = 0; row < table.size(); row++)

     for (int col = 0; col < table[row].size(); col++)

            cout << table[row][col] << "  ";

cout << endl;

6、使用push_back()成员函限乘

加入一行:table.push_back(vector<double> (COLUMNS, 0.0));

在每行末尾直接加一个元素:

for (int row = 0; row < table.size(); row++)

      table[row].push_back(0.0);

创建不规则二维表

vecotor< vecotor<double> > table;

for (int col = 1; col <= 3; col++)

     table.push_back(vector<double> (col, 0.0));   

结果如图:

0.0

0.0 0.0

0.0 0.0 0.0

六、常见的错误

1、vector<int> v; 

for (int i = 0; i < 10; i++)

     v[i] = i;

//知道错在哪里了吗?因为v是一个空的对象,它的容量大小为0,这是不允许使用下标来赋值的。

//解决办法有两种:

 第一种:使用push_back()成员函数,这个函数会自动扩展其容量以适应新的元素

 第二种:使用reserve()成员函数来预留容量。

 

2、在使用迭代器的时候一定要注意,每次使用之后会有可能改变了指向,所以一定要注意,

最好在每次使用的都重新让他指向你需要的地方。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值