vector 容器的增查删改
#include<iostream>
#include<vector>
using namespace std;
//vector 输出
void Print_vector(vector<int>& v)
{
//begin(),end();返回的是迭代器
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
cout << *it << " ";
cout << endl;
}
//vector 初始化
void text01()
{
vector<int> v1;//默认构造
int arr[] = { 10,20,30,40 };
vector<int> v2(arr, arr + sizeof(arr) / sizeof(int));
vector<int> v3(v2.begin(), v2.end());
vector<int> v4(v3);
//遍历输出
Print_vector(v4);
return;
}
//vector 赋值
void assginment()
{
int arr[] = { 10,20,30,40 };
vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));
vector<int>v2,v3;
v2.assign(v1.begin(), v1.end());
v3 = v2;//直接赋值
//交换
v3.swap(v2);
}
//vector 大小操作
void text03()
{
vector<int>v1;
v1.size();//元素个数
v1.capacity();//容器的容量
//capacity()>=size()
v1.empty();//是否为空
//v1.resize(int num);重新指定容器的长度,如果容器变长,则以默认值填充,
//如果容器变短,超出部分被删除
//v1.resize(int num,element);默认值改为element;
}
//vector 数据的存取操作
void text04()
{
//at(int idx) ;返回idx 索引指向的数据,如果idx 越界,提出out_of_range异常
//operator[] ; 返回idx 索引指向的数据,,如果idx 越界,直接报错
//frond(); 返回容器中第一个数据
//back(); 返回容器中第二个数据
int arr[] = { 10,20,30,40 };
vector<int> v1(arr, arr + sizeof(arr) / sizeof(int));
for (int i = 0; i < v1.size(); i++)
cout << v1[i] << ' ';
cout << endl;
for (int i = 0; i < v1.size(); i++)
cout << v1.at(i) << ' ';
cout << endl;
return;
}
//vector 插入删除
void text05()
{
vector<int> v;
v.push_back(10);
v.push_back(20);
//头插法
v.insert(v.begin(), 30);
v.insert(v.end(), 40);
//vector 容器支持随机访问
//迭代器支持 +1. +2. -1, -2 这种操作
v.insert(v.begin() + 2, 100);//在第三个位置插入100
Print_vector(v);
//删除
//eraes 可以做上面insert() 的操作
v.erase(v.begin());
v.erase(v.begin() + 1, v.end());
v.clear();//清空
return;
}
int main()
{
//text01();
//text04();
text05();
return 0;
}
用swap 收缩vector空间
#include<iostream>
#include<vector>
using namespace std;
void text()
{
vector<int> v;
//空间不够可以增加空间,但是删除后,不会减少空间
for (int i = 1; i <= 10000; i++)
v.push_back(i);
cout << "初始......................" << endl;
cout << "size():" << v.size() << endl;
cout << "capacity" << v.capacity() << endl;
puts("");
cout << "删除后......................" << endl;
v.resize(10);
cout << "size():" << v.size() << endl;
cout << "capacity" << v.capacity() << endl;
puts("");
cout << "优化后......................" << endl;
vector<int>(v).swap(v);
cout << "size():" << v.size() << endl;
cout << "capacity" << v.capacity() << endl;
return;
}
int main()
{
text();
return 0;
}
reserve预留空间
#include<iostream>
#include<vector>
using namespace std;
void text()
{
//reserve 预留空间
int num = 0;//内存申请的次数
int* address = NULL;
vector<int> v;
v.reserve(10000);
for (int i = 0; i <= 10000; i++)
{
v.push_back(i);
if (address != &(v[0]))
{
address = &(v[0]);
num++;
}
}
cout <<"num=="<< num << endl;
}
int main()
{
text();
return 0;
}