STL函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// 删除向量中的所有元素,然后将选代器first和last指示范围中的元素插入该向量中
void assign(iterator first,iterator last)
//删除向量中的所有元素,然后将cdl的n个副本插入该向量中
void assign(size_type n,constT&el=T())
//返回向量中位置为n的元素
T&at(siz type n)
//返回向量中位置为n的元素
const T&at(size_type n)const
//返回向量的最后一个元素
T&back()
//返回向量的最后一个元素
const T&back()const
//返回一个选代器,该选代器引用向量的第一个元素
iterator begin()
//返回一个迭代器∶该送代都引用向量的第一个元素
const_iterator begin()const
//返回可以存储在向量中的元素数目
siz_type capacity()
//清除向量中的所有元素
void clear()
//如果向量不包括元素,则返回true,否则返回false
bool empty()const
//返回一个迭代器。,该选代器位于向量的最后一个元素之后
iterator end()
//返回一个const达代器,该达代器位于向量的最后一个元素之后
const_iterator end()const
//除由迭代器i引用的元素,返回一个迭代器,用被除元素之后的元素
iterator erase(teator i)
//删除迭代器first和last指示范围中的元素,返回一个达代器,引用被除的最后一个元素之后的元素
iterator erase(iterator fist,iterator last)
//返回向量的第一个元素
T& front()
//返回向量的第一个元素
const T& front()const
//在由选代器i引用的元素之前插入d,并返回引用新插入元素的选代器
iterator insert(iterator const T& el=T())
//在选代器i引用的元素之前插入el的n个副本
void insert(iterator i,size_type n, const T&el)
//在选代器i引用的元素之前插入迭代器frs和hst指示范围中的元素
void insert(iterator i,iterator fist,iterator last)
//返回向量的最大元素数
size _type max_sizt()const
//下标运算符
T&operator[]
//下标运算符
const T& operatof[]const
//删除向量的最后一个元素
void pop_back()
//在向量的末尾插入el
void push_back(const T& el)
//返回引用向量中最后一个元素的迭代器
reverse_iterator rbegin()
//返回引用向量中最后一个元素的选代器
const_reverse_iterator rbegin()const
//返回位于向量中第一个元素之前的选代器
reverse_iterator rend()
//返回位于向量中第一个元素之前的迭代器
const_reverse_iternator rend()const
//如果向量的容量小于n,该函数就为向量预留保存n项的足够空间
void reserve(size_type n)
//反转向量
void reverse()
//使向量保存n个元素,方法是∶通过元素el再添加n-size()个位置,或者丢弃向量末尾溢出的sizs()-n个位置
void resize(size_type n,const T&el=T))
//返回向量中的元素数量
size_type size()const
//与另一个向量v交换内容
void swap(vector<T>&v)
//创建空向量
vector()
//用类型T的n个el副本创建一个向量(如果没有提供ed,则使用默认的构造函数T())
vector(siz_type n, const T&el=T())
//用达代器fist 和last指示范围中的元素构造一个向量
vector(iterator fist,iterator last)
//复制构造函数
vector(const vector<T>& v)

sort()排序函数

排序算法具有同样的灵活性,在对向量v5排序的例子中,v5是以升序来排序的。那么v5如何

按降序排序呢?方法之一先对向量进行升序排序,然后用 reverse()算法来反转向量。另一种方法是

强制sort0算法在得出结果时使用>运算符。为此,可以直接把函数对象作为参数∶

1
2
3
4
5
6
7
8
sort(v5.begin(),v5.end(),greater<int>());


//或者间接使用
sort(v5.begin(),v5.end(),f2);
bool f2(int m,int n){
return m > n ;
}
greater()函数

头文件 #include

STL已定义的函数,这个函数对象定义为模板结构,实际上该函数重载了运算符>。

函数size(): 返回向量当前的元素数目(即:向量大小)

函数capacity():返回向量能够拥有的元素数目(即:向量的容量)

函数resize() :可以改变函数的容量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <vector>
using namespace std;

void main(int arhc, const char * argv[])
{
int a[] = { 1,2,3,4,5 };
int b[] = {0};
// b[1] = 5;
//cout << "b1:" << b[1] <<endl;
vector<int> v1;
for (int j = 1; j <= 5; j++)
{
v1.push_back(j);
}
cout << "v1:" << v1.size() << endl;

vector<int> v2(3, 7);

cout << "v2:" << v2.size() << endl;

//获取v1的下标为【1】的元素复制给i1
vector<int>::iterator i1 = v1.begin() + 1;
vector<int> v3(i1, i1 + 3);
cout << "v3:" << v3.at(2) << endl;
v3[1] = v3.front();
for (SIZE_T i = 0; i < v3.size(); i++) {
cout << "V3[" << i << "]" << v3[i] << endl;
}

vector<int> v4(v1); // v4=(1 2 3 4 5),size=5,capacity=5
vector<int> v5(5); // v5={0 0 0 0 0}
v5[1] = v5.at(3)=9; // v5 = (0 9 0 9 0)
v3.reserve(6); // v3=(2 3),size= 2,capacity=6
v4.resize(7); // v4=(1234500),size=7,capacity=10
v4.resize(3); // v4=(123),size=3,capacity=10
v4.clear(); // v4 is empty,size=0,capacity=10(!)
v4.insert(v4.end(), v3[1]); // v4 = (3)
v4.insert(v4.end(), v3.at(1)); // v - (33)
v4.insert(v4.end(), 2, 4); // 4=(3344)
v4.insert(v4.end(), v1.begin() + 1, v1.end() - 1);// v4=(3 3 4 4 2 3 4)
v4.erase(v4.end() - 2); //v4=(3 3 4 4 2 4)
v4.erase(v4.begin(), v4.begin() + 4); // v4 = (2 4)
v4.assign(3, 8); // v4 = (8 8 8)
v4.assign(a, a + 3); // v4 = (1 2 3)

replace(v5.begin(), v5.end(), 0, 7);
printVector(v5);

const char *s = "Green";
vector<Person> v6(1,Person(s,25));
v6.push_back(Person("Ann", 30));
v6.push_back(Person("Bill", 20));

sort(v6.begin(), v6.end(),greater<Person>());


for (size_t i = 0; i < v6.size(); i++)
{
info manInfo = v6[i].getInfo(v6[i]);
cout << manInfo.name << "今年" << manInfo.age << "了" << endl;
}

sort(v6.begin(), v6.end(),lesserAge);


for (size_t i = 0; i < v6.size(); i++)
{
info manInfo = v6[i].getInfo(v6[i]);
cout << manInfo.name << "今年" << manInfo.age << "了" << endl;
}

return;
}

image-20200908075611896

image-20200908075627415