STL容器之 vector容器

/***********vector容器使用*************/
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<string>

using namespace std;
int main()
{
    //容器初始化
    vector<int> src_Data_1;//适合元素未知  在程序中动态添加  下标访问之前必须 保证容器中有足够的元素
    vector<int> src_Data_2(5);//定义一个5个int元素均为0的容器
    vector<int> src_Data_3(5, 8);//定义一个5个int元素均为8的容器
    vector<int> src_Data_4(src_Data_3.begin(), src_Data_3.end());//迭代器区间初始化  常用与获取容器的子序列
    vector<int> src_Data_5{ 1,2,1,3 };//大括号 列表初始化
    src_Data_1.push_back(1);
    src_Data_1.push_back(2);//尾插 动态申请内存
    src_Data_1.push_back(3);

    //遍历容器
    //下标访问
    for (int i = 0; i < src_Data_1.size(); i++)//size() 容器中已有多少元素 Capacity()容器可以容纳多少元素 empty()判断是否为空 空返回true
    {
        cout << src_Data_1[i] << " ";
    }
    cout << endl;
    vector<int>::iterator iter, iter2;
    for (iter = src_Data_1.begin(); iter != src_Data_1.end(); iter++)
    {
        cout << *iter << " ";
    }
    cout << endl;
    //insert插入操作  在指定位置前插入  有三个重载函数 [begin,end)
    iter = src_Data_1.begin();
    src_Data_1.insert(iter, 9);//
    iter = src_Data_1.begin();
    src_Data_1.insert(iter + 1, 5, 1);//
    iter2 = src_Data_3.begin();
    iter = src_Data_1.end();
    src_Data_1.insert(iter, iter2, iter2 + 4);//
    for (iter = src_Data_1.begin(); iter != src_Data_1.end(); iter++)
    {
        cout << *iter << " ";
    }
    //erase操作
    for (iter = src_Data_1.begin(); iter != src_Data_1.end();)
    {
        if (*iter == 3)
            iter = src_Data_1.erase(iter);
        else
            ++iter;
    }
    //iter = src_Data_1.begin();
    //src_Data_1.erase(iter, src_Data_1.end() - 2);
    cout << endl;
    for (iter = src_Data_1.begin(); iter != src_Data_1.end();iter++)
    {
        cout << *iter << " ";
    }
    cout << endl;
    sort(src_Data_1.begin(), src_Data_1.begin()+8);//排序 迭代器区间也是 左闭右开
    for (iter = src_Data_1.begin(); iter != src_Data_1.end(); iter++)
    {
        cout << *iter << " ";
    }
    vector<int> ::iterator p;
    cout << "输入艺查找的数x" <<endl;
    int x;
    while (cin >> x)
    {
        p = find(src_Data_1.begin(), src_Data_1.end(), x);//若x不是基本类型  则需要重载  ==
        if (p != src_Data_1.end())
            cout << "在序列中找到了x " << *p << endl;
        else
            cout << "未找到相应的x" << endl;
        if (x == 110)
            break;
    }
    src_Data_1.clear();//容器相当于一个花瓶  里面的枣子就是元素  clear相当于把花瓶里的枣子都倒出来,但是花瓶依然存在
    cout << "capacity= "<<src_Data_1.capacity() << endl;//capacity表示花瓶的容量
    cout << "size = " << src_Data_1.size() << endl;//size表示 花瓶已经装了多少元素
    vector<int>().swap(src_Data_1);//删除花瓶本身
    cout << "capacity= " << src_Data_1.capacity() << endl;
    cout << "size = " << src_Data_1.size() << endl;    
    return 0;
}

之前在编写程序的过程中,经常出现vector 容器 subscript out of range,一般原因就是容器内没有足够多的元素给你进行访问,或者容器根本没有初始化,导致访问越界;

常用的解决方案:记得容器初始化; 在程序中进行下标判断 是否越界  ; 迭代器区间 都是左闭右开 begin()指向容器第一个元素,end()指向容器最后一个元素的后一个元素位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值