关于vector类的基本操作及insert使用注意

向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
    
    在使用它时, 需要包含头文件 vector, #include<vector>
    
    vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作。

 

vector类的基本操作有: 

1>. a.size()                 //获取向量中的元素个数
2>. a.empty()                //判断向量是否为空 

3>. a.clear()                //清空向量中的元素

4>. 复制
        a = b ;            //将b向量复制到a向量中

5>. 比较
        保持 ==、!=、>、>=、<、<= 的惯有含义 ;
        如: a == b ;    //a向量与b向量比较, 相等则返回1

6>. 插入 - insert
        ①、 a.insert(a.begin(), 1000);            //将1000插入到向量a的起始位置前
        ②、 a.insert(a.begin(), 3, 1000) ;        //将1000分别插入到向量元素位置的0-2处(共3个元素)
        ③、 vector<int> a(5, 1) ;
            vector<int> b(10) ;
            b.insert(b.begin(), a.begin(), a.end()) ;        //将a.begin(), a.end()之间的全部元素插入到b.begin()前

 7>. 删除 - erase
        ①、 b.erase(b.begin()) ;                     //将起始位置的元素删除
        ②、 b.erase(b.begin(), b.begin()+3) ;        //将(b.begin(), b.begin()+3)之间的元素删除

8>. 交换 - swap
        b.swap(a) ;            //a向量与b向量进行交换

以下是实验代码:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<int> v;
    v.push_back(3);  //数组尾部插入3
    v.push_back(2);
    v.push_back(1);
    v.push_back(0);
    cout << " 下标 " << v[3] << endl;
    cout << " 迭代器 " << endl;
    for (vector<int>::iterator i = v.begin(); i != v.end(); ++i)
    {
        cout << *i << " ";
    }
    cout << endl;
    v.insert(v.begin(), 4396);
    v.insert(v.end(), 777);

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

    vector<int> arr(10);
    for (int i = 0; i < 10; i++)
    {
        arr[i] = i;
    }
    for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
    {
        cout << *i << " ";
    }
    cout << endl;

    arr.erase(arr.begin());//删除 同insert

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

    arr.erase(arr.begin(), arr.begin() + 5);

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

    system("pause");
    return 0;
}

 

操作时发现了vector::insert操作的位置有些奇怪,我以为它会是在我输入的位置处向后挤容器中原有的元素,结果在第一个元素之前插入了4396 ,在最后一个元素之后插入777,如图:

于是我实验了一下:

 

	v.insert(v.begin(),4396);
	v.insert(v.end(), 777);
	v.insert(v.begin() + 2, 2200);
	v.insert(v.end()-1, 666);

结果是

查阅资料后是发现insert begin+n是在第n个元素之前插入,insert end + n 是在n个元素之后插入

 

本文参考了http://www.cnblogs.com/duoduo369/archive/2012/04/12/2439118.html

以及https://www.cnblogs.com/aminxu/p/4686332.html

(第一篇blog试水)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值