主要是为了学习vector。
参考了http://blog.csdn.net/lsh_2013/article/details/46731331?%3E
一个vector类似于一个动态的一维数组。
vector中可以存在重复的元素!
vector<int> a; // 声明一个元素为int类型的vector a
vectot<MyType> a; // 声明一个元素为MyType类型的vector a
这里的声明的a包含0个元素,既a.size()的值为0,但它是动态的,其大小会随着数据的插入和删除改变而改变。
vector<int> a(100, 0); // 这里声明的是一个已经存放了100个0的整数vector
2.向量操作
常用函数:
a.size(); // 返回vector的大小,即包含的元素个数
a.pop_back(); // 删除vector末尾的元素,vector大小相应减一
a.push_back(); // 用于在vector的末尾添加元素
a.back(); // 返回vector末尾的元素
a.clear(); // 将vector清空,vector大小变为0
其他访问方式:
cout<<a[5]<<endl;
cout<<a.at(5)<<endl;
以上区别在于后者在访问越界时会抛出异常,而前者不会。
常见的:
1.push_back() 在数组的最后添加一个数据
2.pop_back() 去掉数组的最后一个数据
3.at() 得到编号位置的数据
4.begin() 得到数组头的指针
5.end() 得到数组的最后一个单元+1的指针
6.front() 得到数组头的引用
7.back() 得到数组的最后一个单元的引用
8.max_size() 得到vector最大可以是多大
9.capacity() 当前vector分配的大小
10.size() 当前使用数据的大小
11.resize() 改变当前使用数据的大小,如果它比当前使用的大,则填充默认值
12.reserve() 改变当前vecotr所分配空间的大小
13.erase() 删除指针指向的数据项
14.clear() 清空当前的vector
15.rbegin() 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend() 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty() 判断vector是否为空
18.swap() 与另一个vector交换数据
例题:
找到n的第k个约数,如果没有输出-1
#include<bits/stdc++.h> using namespace std; int main() { long long int n,k; vector<long long int>v; cin>>n>>k; for(int i=1;i<=sqrt(n);i++) { if(n%i==0) v.push_back(i);// 用于在vector的末尾添加元素 if(n%i==0 && i*i!=n) v.push_back(n/i); } sort(v.begin(),v.end());//头指针,尾指针排序 if(k>v.size()) printf("-1"); else cout<<v[k-1]<<endl; }