(一)STL:序列式容器——vector的常见用法

1.vector类对象的初始化

  在其尾部插入元素:

#include <iostream>
#include <vector>
#include <algorithm>

void main()
{
	vector<int> vecInt;
	vecInt.push_back(1);
	vecInt.push_back(2);
	vecInt.push_back(3);
	vecInt.push_back(4);
	vecInt.push_back(5);
	vecInt.push_back(5);
	vecInt.push_back(6);
}

 2.vector容器中元素的遍历

  (1).迭代器遍历

vector<int>::iterator iter;
for (iter = vecInt.begin(); iter != vecInt.end(); iter++)
 {
    cout << *iter << ",";
 }
cout << endl;

   (2).数组形式遍历

for (int i = 0; i < vecInt.size(); i++)
{
    cout << vecInt[i] << ",";
}
cout << endl;

   (3).at()函数遍历

for (int i = 0; i < vecInt.size(); i++)
 {     
     cout << vecInt.at(i) << ","; 
 } 
 cout << endl;

   以上三种遍历方法输出结果:

        

3.size()和capacity()的区别

    (1).函数size()和capacity()可以统计容器中元素的数量,size函数返回容器中现有的元素数量;

         capacity()函数返回容器中实际能够容纳的元素数量. 

vector<int> vecInt;
vecInt.reserve(10);//预先设置容器的大小
vecInt.push_back(1);
vecInt.push_back(2);
vecInt.push_back(3);
vecInt.push_back(4);
vecInt.push_back(5);
vecInt.push_back(5);
vecInt.push_back(6);

cout << "size:" << vecInt.size() << endl;
cout << "capacity:" << vecInt.capacity() << endl;

结果如下:


4.删除vector容器中的元素

    删除容器中的元素,可以使用3个成员函数:pop_back(),erase()和clear;

    pop_back()函数删除最后一个元素, 函数erase()可以删除由迭代器指定的元素,也可以删除区间范围

    内的元素,clear函数实现删除向量vector的所有元素,相当于erase(begin(), end()).  

(1).pop_back()函数的使用

while (!vecInt.empty())
{
    //返回尾部元素
    cout << vecInt.back() << ",";
    //删除尾部元素
    vecInt.pop_back();
}

(2)erase()函数的使用(返回值为迭代器,它指向删除元素的下一个元素)

 注意:这种情况会导致程序崩溃,因为在删除指定元素后,iter就已经成为野指针,对野指针++是不可取的

vector<int>::iterator iter;
for (iter = vecInt.begin(); iter != vecInt.end(); iter++)
{
    //删除数值为5的元素
    if (5 == *iter)
    {
        vecInt.erase(iter);
    }
}

 因为erase删除指定元素后,返回的迭代器指向下一个元素,在进行下次循环后,实际上是进行了两次后移,

 所以无法删除相邻的指定元素

vector<int>::iterator iter;
for (iter = vecInt.begin(); iter != vecInt.end();iter++)
{
    if (5 == *iter)
    {
        iter = vecInt.erase(iter);
    }
}

输出结果:

    

vector中的erase的正确用法:erase删除指定元素后,返回的迭代器指向删除元素的下一个元素,

因此用自减来抵消它的自动后移.

vector<int>::iterator iter;
for (iter = vecInt.begin(); iter != vecInt.end(); iter++)
{
    if (5 == *iter)
    {
        iter = vecInt.erase(iter);
        iter--;
    }
}

输出结果:

    


        

猜你喜欢

转载自blog.csdn.net/zkk_18815518722/article/details/80764421