1.刷题地址
PAT计算机程序能力考试官网:https://www.patest.cn/practice,如果是备考甲级只要选择甲级选项进入即可。
2.基础知识
2.1 algorithm库
c
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int a[] = {1, 3, 4, 5, 10, -4, -9};
printf("min:%d,max:%d.\n", min(1, 4), max(1,4)); // 结果为1和4
printf("a[0] before:%d.\n", a[0]); // 结果为1
reverse(a, a+7); // 数组倒序范围
printf("a[0] after:%d.\n", a[0]); // 结果为-9
cout<<*min_element(a, a+7)<<endl; // 结果为-9,函数返回是地址,需要加*
cout<<*max_element(a, a+7)<<endl; // 结果为10,函数返回是地址,需要加*
int b=1,c=2;
printf("before b=%d,c=%d\n",b,c); // 交换前结果为:1,2
swap(b,c);
printf("before b=%d,c=%d\n",b,c); // 交换后结果为:2,1
return 0;
}
2.2 大小写转换
c
#include <iostream>
using namespace std;
int main(){
char a='a', b='B';
cout<<"a:"<<a<<",b:"<<b<<endl; // 结果为a和B
a = toupper(a); // 转化为小写
b = tolower(b); // 转换成大写
cout<<"a:"<<a<<",b:"<<b<<endl; // 结果为A和b
return 0;
}
2.3 STL-map
c
begin()//返回指向第一个元素的迭代器
end()//返回指向最后一个元素的迭代器
rbegin()//返回指向最后一个元素的迭代器
rend()//返回指向第一个元素的迭代器
empty()//测试map容器是不是空的
size()//返回容器的大小
max_size()//返回容器最大的容量,这个是相对于内存来讲的
insert()//向容器中插入元素
erase(it)//删除容器当中it指向的元素,it为迭代器
erase('c')//删除容器中键值为'c'的元素
eras(it, mymap.end())//删除容器中it和mymap.end()之间的元素,它们两个都是迭代器
foo.swap(bar)//交换容器foo和bar中的元素
clear()//清空容器
find('b')//返回指向键值为'b'的的迭代器,没有的话就指向end()
count('c')//查找键值为'c'的元素,在map中返回0或者1,0表示没有这个键值,1表示有,但是在mutimap中就是这个键值出现的次数
lower_bound('b')//返回指向键值为'b'的迭代器,当没有这个键值时就返回空的迭代器
upper_bound('b')//返回指向键值为'b'的下一个元素的迭代器,没有的话就返回空的迭代器
2.4 STL-vector
c
begin()//返回指向第一个元素的迭代器
end()//返回指向最后一个元素的迭代器
rbegin()//返回指向最后一个元素的迭代器
rend()//返回指向第一个元素的迭代器
size()//返回容器的元素的个数
max_size()//返回容器的最大的元素的个数
resize()//重新调整容器的容量,无论原来的容量是大于还是小于后来的恶容量都可以
myvector.resize(5);//将容器的容量调整为5,如果变短了就直接删除多余的元素,长了就用0将剩余的空间填满
myvector.resize(8,100);//将容器的容量调整8,并将多出来的位置用100表示
myvector.resize(12);//将容器的容量调整为12,多出的空间用0填充
capacity()//返回这个容器在内存空间中最多的连续空间
empty()//测试这个容器是不是空的
reserve()//重新调整容器的capacity
at(i)//返回位置为i处得元素的引用,当超出容器的最后一个位置就抛出一个异常
front()//返回第一个元素的引用
back()//返回最后一个元素的引用
void assign ( InputIterator first, InputIterator last );//将迭代器first和迭代器last之间的元素付给调用这个方法的容器
void assign ( size_type n, const T& u );//将n个u付给容器
push_back()//在容器的末尾添加元素
pop_back()//删除容器最后面的一个元素
iterator insert ( iterator position, const T& x );//在迭代器position的前面插入元素x
void insert ( iterator position, size_type n, const T& x );//在position的前面插入n个x
template <class InputIterator>
void insert ( iterator position, InputIterator first, InputIterator last );//将迭代器first和last之间的元素插入到position前面
iterator erase ( iterator position );//删除迭代器position指向的元素
iterator erase ( iterator first, iterator last );//删除迭代器first和last之间的元素,不包括last指向的元素
void swap ( vector<T,Allocator>& vec );//交换两个容器的元素
void clear ( );//清空容器当中的元素
2.5 STL-set
c
set容器(只存储值不相同的元素,并且按照从小到大的顺序排列)
iterator begin ();//返回指向set容器第一个元素的迭代器
iterator end ();//返回指向容器最后一个元素的迭代器
reverse_iterator rbegin();//返回指向容器最后一个元素的迭代器
reverse_iterator rend();//返回指向容器第一个元素的迭代器
bool empty ( ) const;//测试容器是否为空
size_type size() const;//计算容器当中元素的个数
size_type max_size () const;//计算容器的最大容量
pair<iterator,bool> insert ( const value_type& x );//将元素x插入到set容器中返回pair对象,first元素为指向插入的元素的迭代器,second元素为指示插入成功与否的bool值
iterator insert ( iterator position, const value_type& x );//将x插入
template <class InputIterator>
void insert ( InputIterator first, InputIterator last );//将first与last只见到恶元素插入到容器中
void erase ( iterator position );//删除position位置处得元素
size_type erase ( const key_type& x );//删除值为x的元素
void erase ( iterator first, iterator last );//删除迭代器first和last之间的元素
void swap ( set<Key,Compare,Allocator>& st );//交换两个set容器的元素
void clear ( );//清空set容器
2.6 STL-stack
c
bool empty ( ) const;//测试栈是不是空的返回1表示空0表示非空
size_type size ( ) const;//返回当前栈的元素的个数
value_type top ( );//返回当前的栈顶元素,不删除这个元素
const value_type top ( ) const;//返回栈顶元素的const引用
void push ( const T& x );//将当前的元素x入栈
void pop ( );//删除栈顶元素
2.7 STL-queue
c
bool empty ( ) const;//测试当前队列是不是空,0表示空,1表示非空
size_type size ( ) const;//队列的元素的个数
value_type& front ( );//返回队首元素的引用
const value_type front ( ) const;//返回队首元素的const值
value_type& back ( );//返回队尾元素的引用
const value_type& back ( ) const;//返回队尾元素的const值
void push ( const T& x );//将x入队列
void pop ( );//删除队首元素
2.8 STL-string
c
string.c_str() //返回的是const char*而非char *,如果想返回char *的话可以这样写:char * a = (char*)string.c_str();
strtok()//函数很好用,分割字符串
insert(int pos, string s) //在pos位置后面插入s字串
transform(s.begin(),s.end(),s.begin(),::tolower); // 将s的字串全部变成小写的
transform(s.begin(),s.end(),s.begin(),::upper); // 将s的字串全部变成大写的
2.9 判断字符类型
c
int isalnum(int ch); // 判断是否数字,大写字母或小写字母;如果是,返回非零值,否则返回零值。
int isalpha(int ch); // 判断是否为字母;如果是,返回非零值,否则返回零值
int islower(int ch); // 判断是否为小写字母;如果是,返回非零值,否则返回零值。
int isupper(int ch); // 判断是否为大写字母;如果是,返回非零值,否则返回零值。
int isdigit(int ch); // 判断是否为数字字符;如果是,返回非零值,否则返回零值。
int isxdigit(int ch); // 判断是否为十六进制数字字符;如果是,返回非零值,否则返回零值。
int isspace(int ch); // 判断是否为空白字符;包括空格,换页,换行,回车,水平垂直制表符;
int isblank(int ch); // 判断是否为空格字符;如果是,返回非零值,否则返回零值。
3. 刷题总结
c
// ******** 字符串格式化输入 *********** //
char formattime[25];
sprintf(formattime, "%d:%d:%d",day,hour,minute);
// ******** 结构体重载运算符 *********** //
struct Person{
string name;
string state;
string format_time;
int time;
bool operator<(const Person& t) const{
return time<t.time;
}
};
// ******** Vector比较 *********** //
vector<int> a=b;
cout<<a==b<<endl; // 用于比较vector序列是否相同,完全相同就输出true
// ******** Vector倒序遍历 *********** //
vector<int> v(a.rbegin(),a.rend());