没有太多注意事项:
1》》注意vector是数组,如果频繁插入,效率很低。
2》》学到一个有用的函数:random_shuffle()随机乱序
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
#include<ctime>
using namespace std;
void fun(int i)
{
cout << i << endl;
}
void STLcacpcity()
{
vector<int> vec(5);
cout << vec[0] << endl; //只定义不初始化的话自动赋0
vector<int>::iterator ite = vec.begin(); //vector迭代器
cout << vec.capacity() << endl; //初始化为几 容量就是几
vec.push_back(1); //尾部添加元素1
vec.push_back(2);
vec.push_back(6);
cout << vec[7] << vec.capacity() << endl; //每次新增空间是已经存在空间的1/2
}
void STLreserve()
{
vector<int>vec(5);
vec.reserve(2); //小于原始大小,失效
vec.reserve(12); //参数为几就是几
cout << vec.capacity() << endl;
}
void STLsize()
{
vector<int>vec(5);
cout << vec.size() << endl << vec.capacity() << endl;
vec.resize(3); //只修改有效元素个数,不改变容量大小
cout << vec.size() << endl << vec.capacity() << endl;
cout << vec.empty() << endl; //是否有元素
}
void STLprint()
{
vector<int> vec;
for (int i = 0; i < 10; i++)
{
vec.push_back(i*i);
}
//for (int i = 0; i < 10; i++)
//{
// cout << vec[i] << endl;
// cout << vec.at(i) << endl;
// cout << vec.back() << endl;
//}
vector<int>::iterator ite = vec.begin();
vector<int>::iterator ites = vec.end();
//for (ite; ite != ites; ite++)
//{
// cout << *ite << endl;
//}
for_each(ite,ites,fun);
}
void STLinsert()
{
vector<int> vec;
vector<int> vecs;
for (int i = 0; i < 10; i++)
{
vecs.push_back(9);
vec.push_back(i);
}
//vec.insert(vec.begin() + 2, 12);
//vec.insert(vec.begin() + 2,4, 12);
vec.insert(vec.begin() + 2, vecs.begin()+2,vecs.begin()+4);
for_each(vec.begin(), vec.end(), fun);
}
void STLdel()
{
vector<int> vec;
vector<int> vec1;
for (int i = 0; i < 5; i++)
{
vec1.push_back(0);
vec.push_back(i);
}
vec1.push_back(0);
vec1.push_back(0);
vec.pop_back(); //删除尾部元素
vec.erase(vec.begin() + 3, vec.end()); //删除迭代器指定元素
vec.clear(); //删除全部
vec = vec1; //赋值之后vec和vec1完全一样
for_each(vec.begin(), vec.end(), fun);
}
void STLsort()
{
vector<int> vec(1);
vec.push_back(9);
vec.push_back(1);
vec.push_back(2);
vec.push_back(5);
vec.push_back(3);
vec.push_back(4);
vec.push_back(6);
vec.push_back(7);
vec.push_back(8);
sort(vec.begin()+3, vec.end()-2); //从下标3到下标倒数2的排序,其他不变
sort(vec.begin(), vec.end(),greater<int>());
srand((unsigned int)time(0));
random_shuffle(vec.begin(),vec.end()); //随机乱序
for_each(vec.begin(), vec.end(), fun);
}
int main()
{
STLsort();
return 0;
}