内存管理:
使用reserve()提前设置容量大小
#include <iostream>
#include <vector>
#include <algorithm>//find
using namespace std;
int main(){
/*memory management内存管理
1.size() 获得容器中元素个数
2.capacity() 获得容器中总的可以容纳元素的个数,capacity()-size()=还可以容纳多少个元素
3.void resize (size_type n, value_type val = value_type());
强制把容器改为容纳n个元素。
n<capacity():删除尾部的多余元素。
n>=capacity()并且第二个参数val不为0,则增加n-capacity()个val
4.reserve(Container::size_type n)
强制把容器容量改为不小于n,n小于当前容量capacity(),vector忽略它,啥都不做
如果n大于当前容量,重新申请n,然后赋值回来*/
/*v9.size();v9.capacity()*/
vector<int> v9;
for(int i=0;i<15;i++)//size:[15] capacity:[19](0,1,2,3,4,5,6,7,8,9,10,11,12,13,14)
{
v9.push_back(i);
cout<<"size : "<<v9.size()<<" capacity: "<<v9.capacity()<<endl;
}
/*v9.resize( size_type n, value_type val = value_type())*/
v9.resize(10);//size:[10] capacity:[19](0,1,2,3,4,5,6,7,8,9)
cout<<"after v9.resize(10) the vector size :"<<v9.size()<<" capacity: "<<v9.capacity()<<endl;
v9.resize(20,100);
cout<<"after v9.resize(20,100) the vector size :"<<v9.size()<<" capacity: "<<v9.capacity()<<endl;
//size:[20] capacity:[28](0,1,2,3,4,5,6,7,8,9,100,100,100,100,100,100,100,100,100,100)
/*v9.reserve(Container::size_type n)*/
v9.reserve(100);
cout<<"after v9.reserve(100) the vector size :"<<v9.size()<<" capacity: "<<v9.capacity()<<endl;
//size:[20] capacity:[100](0,1,2,3,4,5,6,7,8,9,100,100,100,100,100,100,100,100,100,100)
vector<int> v10;
vector<int>::size_type size;
v10.reserve(1000);
for(int i=0;i<1000;i++)
v10.push_back(i);
cout<<"size : "<<v10.size()<<" capacity: "<<v10.capacity()<<endl;
system("pause");
return 0;
}
需要注意的是:
如果push_back不会使得迭代器失效。
但是如果调用insert,erase,会使得数组的插入/删除点后面的所有数据发生变化,那么相应的迭代器也失效。
四、几种重要的算法,使用时需要包含头文件
#include<algorithm>
- 1
(1)sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
(2)reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1
(3)copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
(4)find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
bool Comp(const int& a, const int& b) {
return a > b;
}
/*排序sort()*/
sort(v10.begin(),v10.end());//左闭右开,end()的设计是有道理的,刚好这样排序所有的元素
/*翻转reverse()*/
reverse(v10.begin(),v10.end());//左闭右开
/*复制copy*/
copy(v9.begin(),v9.end(),v10.begin()+1);//v9左闭右开
/*自定义排序sort()*/
sort(v9.begin(), v9.end(), Comp);
STL里Vector的assign()函数用法
https://blog.csdn.net/doubleintfloat/article/details/52280481
Vector作为返回值:
用参数引用的方法,直接返回过于麻烦
Vector存结构体---还可以排序
https://www.cnblogs.com/SZxiaochun/p/6377084.html#include <iostream>
#include <vector>
#include <string>
#include <algorithm>//find,sort,reverse,copy
using namespace std;
struct Person
{
string Name;
string Sex;
int Age;
int High;
Person():Age(0),High(0){ }
};
bool Comp(const Person& a, const Person& b) {
return a.Name > b.Name;//大于号就是从大到小,小于号就是从小到大
}
int main(){
Person per1,per2;
per1.Name = "xiaochun";
per1.Sex = "男";
per1.Age = 21;
per1.High = 168;
per2.Name = "chunxiao";
per2.Sex = "男";
per2.Age = 22;
per2.High = 168;
vector<Person> vec_Person;
vec_Person.push_back(per2);
vec_Person.push_back(per1);
sort(vec_Person.begin(),vec_Person.end(),Comp);
system("pause");
return 0;
}
Vector--shrink_to_fit
// vector::shrink_to_fit
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector (100);
std::cout << "1. capacity of myvector: " << myvector.capacity() << '\n';
myvector.resize(10);
std::cout << "2. capacity of myvector: " << myvector.capacity() << '\n';
myvector.shrink_to_fit();
std::cout << "3. capacity of myvector: " << myvector.capacity() << '\n';
return 0;
}
1. capacity of myvector: 100
2. capacity of myvector: 100//resize不会更改内存大小
3. capacity of myvector: 10//shrink_to_fit更改内存空间大小
Vector--swap
/*swap的用法*/
vector<int> v11;
v11.swap(v9);
/*release memory 2种方法---下面2行*/
//vector<int>().swap(v11);
v11.swap(vector <int>());
还有好多,慢慢来吧。。。
#include <iostream>
#include <vector>
#include <algorithm>//find,sort,reverse,copy
using namespace std;
bool Comp(const int& a, const int& b) {
return a > b;
}
int main(){
/*memory management内存管理
1.size() 获得容器中元素个数
2.capacity() 获得容器中总的可以容纳元素的个数,capacity()-size()=还可以容纳多少个元素
3.void resize (size_type n, value_type val = value_type());
强制把容器改为容纳n个元素。
n<capacity():删除尾部的多余元素。
n>=capacity()并且第二个参数val不为0,则增加n-capacity()个val
4.reserve(Container::size_type n)
强制把容器容量改为不小于n,n小于当前容量capacity(),vector忽略它,啥都不做
如果n大于当前容量,重新申请n,然后赋值回来*/
/*v9.size();v9.capacity()*/
vector<int> v9;
for(int i=0;i<15;i++)//size:[15] capacity:[19](0,1,2,3,4,5,6,7,8,9,10,11,12,13,14)
{
v9.push_back(i);
cout<<"size : "<<v9.size()<<" capacity: "<<v9.capacity()<<endl;
}
/*v9.resize( size_type n, value_type val = value_type())*/
v9.resize(10);//size:[10] capacity:[19](0,1,2,3,4,5,6,7,8,9)
cout<<"after v9.resize(10) the vector size :"<<v9.size()<<" capacity: "<<v9.capacity()<<endl;
v9.resize(20,100);
cout<<"after v9.resize(20,100) the vector size :"<<v9.size()<<" capacity: "<<v9.capacity()<<endl;
//size:[20] capacity:[28](0,1,2,3,4,5,6,7,8,9,100,100,100,100,100,100,100,100,100,100)
/*v9.reserve(Container::size_type n)*/
v9.reserve(100);
cout<<"after v9.reserve(100) the vector size :"<<v9.size()<<" capacity: "<<v9.capacity()<<endl;
//size:[20] capacity:[100](0,1,2,3,4,5,6,7,8,9,100,100,100,100,100,100,100,100,100,100)
vector<int> v10;
vector<int>::size_type size;
v10.reserve(1000);
for(int i=0;i<1000;i++)
v10.push_back(1000-i);
cout<<"size : "<<v10.size()<<" capacity: "<<v10.capacity()<<endl;
/*排序sort()*/
sort(v10.begin(),v10.end());//左闭右开,end()的设计是有道理的,刚好这样排序所有的元素
/*翻转reverse()*/
reverse(v10.begin(),v10.end());//左闭右开
/*复制copy*/
copy(v9.begin(),v9.end(),v10.begin()+1);//v9左闭右开
/*自定义排序sort()*/
sort(v9.begin(), v9.end(), Comp);
/*swap的用法*/
vector<int> v11;
v11.swap(v9);
/*release memory 2种方法---下面2行*/
//vector<int>().swap(v11);
v11.swap(vector <int>());
system("pause");
return 0;
}