C++ vector的基本使用方法

将vector的基本使用方法总结,便于日后回顾。

#include "stdafx.h"
#include <time.h>
#include <vector>
#include <iostream>

// Vector 插入数据方法
vector<int> vecotrInsert()
{
    vector<int> v(10); // 初始化一个元素个数为10个,默认值均为0的vector
    vector<int> v1(10, 99); // 初始化一个元素个数为10个,默认值均为99的vector

    // 第一种插入方式:push_back
    v.push_back(278); // 在vector元素之后,添加一个值为278的元素。

    // 第二种插入方式:insert
    v.insert(v.begin(), v1.begin(), v1.end()); // 在原vecotr的元素之前,插入10个值为99的元素。
    v.insert(++v.begin(), 3, 255); // 在第一个元素之后,插入3个值为255的元素。
    v.insert(v.begin(),54); // 在第一个元素之前,插入一个值为54的元素。
    return v;
}

// Vector 三种push_back数据效率对比
void vectorPushData()
{
    int i = 0;

    clock_t start  = clock(); // 获取当前时钟
    for (; i < 1000; i++)
    {
        vector<int> v;
        for (int j = 0; j < 100; j++)
        {
            v.push_back(j);
        }
    }
    cout << "直接push数据耗时:" << clock() - start << endl;

    start = clock();
    for (i = 0; i < 1000; i++)
    {
        vector<int> v;
        v.resize(100); // 预选分配容器大小
        for (int j = 0; j < 100; j++)
        {
            v.push_back(j);
        }
    }
    cout << "先分配元素个数,再push数据耗时:" << clock() - start << endl; // 效率高于直接push。

    start = clock();
    for (i = 0; i < 1000; i++)
    {
        vector<int> v;
        v.reserve(100); // 预选分配100个存储空间
        for (int j = 0; j < 100; j++)
        {
            v.push_back(j);
        }
    }
    cout << "先分配元素存储空间,再push数据耗时:" << clock() - start << endl; // 效率与使用v.resize()基本一致
}

// Vecotr 迭代器遍历  
void VecotrIterator(vector<int> ver)
{

    if (ver.empty())
        return;

    vector<int>::iterator iter = ver.begin();
    for (; iter != ver.end(); iter++)
    {
        cout << "前向迭代器,输出内容:" << *iter << endl;
    }


    vector<int>::reverse_iterator revIter = ver.rbegin();
    for (; revIter != ver.rend(); revIter++)
    {
        cout << "逆向迭代器,输出内容:" << *revIter << endl;
    }
}

// Vecotr 数组方式使用
void vectorArrayMode()
{
    int iSize = 10000;
    vector<int> v(iSize); // 定义一个长度为iSize的vector,同时默认值被设置后为0(算术和数值型缺省值为定义为0)
    if (!v.empty())
        cout << "v value:" << v[100] << endl;

    vector<int> v1(iSize, 999); // 定义长度为iSize的vector,同时指定默认值为999

    cout << "v1 value:" << v1[200] << endl;

    int iArray[6] = {1,2,3,4,5,6};

    vector<int> v2(iArray, iArray + 6); // 使用数组的元素来初始化vector
    for (int i = 0;  i < 6; i++)
    {
        cout << "数组方式输出内容:" << v2[i] << endl; // 使用下标遍历
    }
}

// Vector 删除数据方法
template <class T>
void vecotrErase(vector<T> ver)
{
    if (ver.empty())
        return;

    // 第一种删除方法
    ver.erase(ver.begin()); // 删除指定迭代器所指向的元素。
    ver.erase(ver.begin(), --ver.end()); // 删除指定返回内的元素。

    // 第二种删除方法
    ver.pop_back(); // 删除末尾的元素。
    cout << "ver size:" << ver.size() << endl; // 输出 ver size:0
}

// 释放vector的存储空间,局部变量随函数执行完成而释放掉。
template <class T>
void ReleaseMemory(vector<T>& ver)
{
    vector<T> verTamp;
    verTamp.swap(ver);
    verTamp.clear(); // 只会清除掉数据,但占用内存不会释放
}

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> v; // 申明了一个空的vector, 元素个数为0
    //v[0] = 1024; // 空vecotr,不能通过下标访问,此处会执行错误

    vectorPushData(); // 比较三种push的效率

    v = vecotrInsert(); // insert数据的方式

    cout << "最大存储的元素个数:" <<  v.max_size() << endl;

    VecotrIterator(v); // 迭代器使用

    vecotrErase(v); // 删除

    vectorArrayMode();  // 数组方式初始化和遍历

    v.clear(); // 清除vector元素,但是不会释放内存。

    ReleaseMemory(v); // 使用局部变量方式释放内存。

    system("pause");

    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值