您的位置:首页 > 编程语言 > C语言/C++

C++ Vector 常见用法全解(代码版)

2018-01-11 15:15 295 查看
C++ vector 用法: 

vector维护的是连续线性空间

void bianli(vector<int>& vt)
{
//遍历1 c++11的新特性
for (auto it : vt)
cout<<it<<" ";
cout<<endl;
//遍历2 直接访问任意元素
for (int i = 0; i < vt.size(); i++)
cout<<vt[i]<<" ";
cout<<endl;
//遍历3 正向迭代器访问
for (auto it = vt.begin(); it != vt.end(); it++)
cout<<*it<<" ";
cout<<endl;
}

bool compare(int a, int b) //对于自定义类型,就需要自己写比较函数。用来sort等功能
{
return a < b;
}

void vector_test()
{
//创建
vector<int> vt1;
vector<int> vt2(3, 1); //初始push进去3个1
vector<int> vt3(vt2); //用vt2构造vt3
vector<int> vt4(vt2.begin() + 1, vt2.end() - 1); //vt2的迭代器圈定的部分初始化vt4

//插入
vt1.push_back(2);
vt2.insert(vt2.begin() + 2, 3); //在某个位置插入value。 注意vt.begin()是在第一个值的前面插入。
vt2.insert(vt2.end(), 7, 2); //vt.end()是在最后一个值后面插入7个2.
vt1.insert(vt1.begin(), vt2.begin(), vt2.end()); //在vt1开头插入vt2。

//获取
vt2[1]; //直接索引获取
vt2.front(); //第一个元素
vt2.back(); //最后一个元素
vector<int>::iterator it1 = vt1.begin(); //获取迭代器首地址
vector<int>::iterator it2 = vt1.end(); //获取迭代器最后一个元素后面那个迭代器

vector<int>::reverse_iterator it3 = vt1.rbegin(); //反向迭代器,现在是指向最后一个元素了。具体用法如下。
for (auto it4 = vt1.rbegin(); it4 != vt1.rend(); it4 ++) //反向遍历数组
cout<<*it4<<" ";
cout<<endl;

//删除
vt2.pop_back(); //删除最后一个
vt2.erase(vt2.begin() + 3); //删除这个迭代器所指的元素(后面那个元素)
vt2.erase(vt2.begin(), vt2.begin() + 2); //删除这两个迭代器之间的元素。是[)。
vt1.clear(); //直接清空

//其他
vt2.empty(); //是否为空
vt2.size(); //数组长度
*max_element(vt2.begin(), vt2.end(), compare); //返回最大值。对于自定义类型也还可以使用,最后加一个compare函数。
*min_element(vt2.begin(), vt2.end(), compare); //返回最小值。min_element函数返回的是一个迭代器。'*'这个符号取值。

sort(vt2.begin(), vt2.end(), compare); //实现排序,compare实现自定义排序
vector<int>::iterator itt = unique(vt2.begin(), vt2.end()); //把排好序的数组中重复的放在后面。返回开始重复的点的迭代器。
vt2.resize(itt - vt2.begin()); //截取数组前n个。上面这三个实现:去重

find(vt2.begin(), vt2.end(), 2); //查找是否有2。找到了返回迭代器;未找到返回vt2.end()。
*upper_bound(vt2.begin(), vt2.end(), 2); //upper_bound返回一个非递减序列[first, last)中的第一个 大于 值val的迭代器。
*lower_bound(vt2.begin(), vt2.end(), 2); //lower_bound返回一个非递减序列[first, last)中的第一个 大于等于 值val的迭代器。
reverse(vt2.begin(), vt2.end()); //反转数组

bianli(vt2);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: