C++ Primer(第五版)学习笔记_3_标准模板库vector(2)

6、元素的插入
insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。
要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> num(3);
num.push_back(2);
num.push_back(7);
num.push_back(9);
//在最前面插入新元素,元素值为8
num.insert(num.begin(), 8);
//在第2个元素前插入新元素1
num.insert(num.begin() + 2, 1);
//在向量末尾追加新元素3
num.insert(num.end(), 3);
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " " ;
cout << endl;
return 0;
}运行结果:
8 0 1 0 0 2 7 9 3
7、元素的删除
erase()方法可以删除vector中所指的一个元素或一段区间中的所有元素。返回删除元素迭代器的位置,即返回该迭代器位置上新的元素。需要注意的是,erase()方法删除一段区间的右区间是开区间,比如num.erase(num.begin() + 1, num.begin()+ 5),为删除区间[1, 5)的元素。
clear()方法则一次性删除vector中的所有元素。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> num;
for(int i = 0; i < 10; i++)
num.push_back(i);
//删除迭代器第2位的元素,迭代器从0开始计数
num.erase(num.begin() + 2);
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " " ;
cout << endl;
//删除第迭代器第1到第4位区间的所有元素,[1, 5)
num.erase(num.begin() + 1,num.begin() + 5);
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " " ;
cout << endl;
//删除迭代器第2位的元素,返回新的第2为的迭代器
vector<int>::iterator n = num.erase(num.begin() + 2);
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " " ;
cout << endl;
cout << "删除的元素的迭代器的新元素为:" << *n << endl;
//清空向量
num.clear();
cout << num.size() <<endl;
return 0;
}运行结果:
0 1 3 4 5 6 78 9
0 6 7 8 9
0 6 8 9
删除的元素的迭代器的新元素为:8
0
8、使用反向迭代器访问vector元素
反向迭代器reverse_iterator有两个主要方法。rbegin()方法指向最后一个元素;rend()方法指向第一个元素的前一个元素。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> num;
for(int i = 0; i < 10; i++)
num.push_back(i);
for(vector<int>::reverse_iterator iter = num.rbegin(); iter !=num.rend(); iter++)
cout << *iter << " " ;
cout << endl;
return 0;
}运行结果:
9 8 7 6 5 4 32 1 0
9、使用reverse反向排列算法
reverse可将向量中某段迭代器区间元素反向排列。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> num;
for(int i = 0; i < 10; i++)
num.push_back(i);
//反向排列向量从首到尾开区间的元素[begin(), end())
reverse(num.begin(), num.end());
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " ";
cout << endl;
return 0;
}运行结果:
9 8 7 6 5 4 32 1 0
10、使用sort算法对向量元素排序
(1)sort算法使用随机访问迭代器进行排序,在默认情况下,对向量元素进行升序排序。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> num;
for(int i = 0; i < 10; i++)
num.push_back(i);
//反向排列向量从首到尾开区间的元素[begin(), end())
reverse(num.begin(), num.end());
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " ";
cout << endl;
//排序,升序排序
sort(num.begin(), num.end());
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " ";
cout << endl;
return 0;
}运行结果:
9 8 7 6 5 4 32 1 0
0 1 2 3 4 5 67 8 9
(2)自己设计排序比较函数,然后把这个函数指定给sort算法,那么sort就根据这个比较函数指定的排序规则进行排序。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
boolcompare(const int& a, const int& b)
{
return a > b;
}
int main(int argc, char* argv[])
{
vector<int> num;
for(int i = 0; i < 10; i++)
num.push_back(i);
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " ";
cout << endl;
//自己设计的排序比较函数,降序排序
sort(num.begin(), num.end(),compare);
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " ";
cout << endl;
return 0;
}运行结果:
0 1 2 3 4 5 67 8 9
9 8 7 6 5 4 32 1 0
11、向量的大小
使用size()方法可以返回向量的大小,即元素的个数。
使用empty()方法返回向量是否为空。
#include <iostream>
#include <vector>
using namespace std;
boolcompare(const int& a, const int& b)
{
return a > b;
}
int main(int argc, char* argv[])
{
vector<int> num;
for(int i = 0; i < 10; i++)
num.push_back(i);
for(vector<int>::iterator iter = num.begin(); iter !=num.end(); iter++)
cout << *iter << " ";
cout << endl;
//输出向量大小
cout << num.size() <<endl;
//输出向量是否为空
if(num.empty())
cout << "向量为空" << endl;
else
cout << "向量不为空" << endl;
num.clear();
//输出向量是否为空
if(num.empty())
cout << "向量为空" << endl;
else
cout << "向量不为空" << endl;
return 0;
}运行结果:
0 1 2 3 4 5 67 8 9
10
向量不为空
向量为空
版权声明:本文为博主原创文章,未经博主允许不得转载。
C++ Primer(第五版)学习笔记_3_标准模板库vector(2)
原文地址:http://blog.csdn.net/keyyuanxin/article/details/46801219