/***********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()指向容器最后一个元素的后一个元素位置