PTA乙级 十题总结
1001 略
1002 关于string的用法
使用 string 类需要包含头文件
<string>
to_string(int)//可将整型变量转变为字符串
简单使用举个例子
string s1;
string s2 = "c++";
string s3 = s2;
string s4 (5, 's');
变量 s1 只是定义但没有初始化,编译器会将默认值赋给 s1,默认值是
""
,也即空字符串。
变量 s2 在定义的同时被初始化为
"c plus plus"
。与C风格的字符串不同,
string 的结尾没有结束标志
'\0'
。
变量 s3 在定义的时候直接用 s2 进行初始化,因此 s3 的内容也是
"c++"
。
变量 s4 被初始化为由 5 个
's'
字符组成的字符串,也就是
"sssss"
。
常用
lenth()
int n = s3.lenth()=3;
s3的真实长度就是3,因为结尾没有’\0’字符,所以不需要长度+1
可以定义string变量的数组 string a[10]={“yi”,”er”};
定义string变量后,可以通过下标的方式访问字符串中的元素,例如s3[0]=c
字符串的拼接可以通过“+ -”直接实现,再也不需要使用C语言中的 strcat()、strcpy()、malloc() 等函数来拼接字符串了,再也不用担心空间不够会溢出了。
用
+
来拼接字符串时,运算符的两边可以都是 string 字符串,也可以是一个 string 字符串和一个C风格的字符串,还可以是一个 string 字符串和一个字符数组,或者是一个 string 字符串和一个单独的字符
插入字符串
insert() 函数可以在 string 字符串中指定的位置插入另一个字符串,它的一种原型为:
string& insert (size_t pos, const string& str);
pos 表示要插入的位置,也就是下标;str 表示要插入的字符串,它可以是 string 字符串,也可以是C风格的字符串。
删除字符串
erase() 函数可以删除 string 中的一个子字符串。它的一种原型为:
string& erase (size_t pos = 0, size_t len = npos);
pos 表示要删除的子字符串的起始下标,len 表示要删除子字符串的长度。如果不指明 len 的话,那么直接删除从 pos 到字符串结束处的所有字符(此时 len = str.length – pos)。
字符串的查找
find() 函数用于在 string 字符串中查找子字符串出现的位置,它其中的两种原型为:
size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
第一个参数为待查找的子字符串,它可以是 string 字符串,也可以是C风格的字符串。第二个参数为开始查找的位置(下标);如果不指明,则从第0个字符开始查找。
如果没有查找到子字符串,那么会返回一个无穷大值 if(s3.find(“d”)!=s3.npos) //如果没找到,返回一个特别的标志 c++中用npos表示,我这里npos取值是4294967295
1003 map的相关使用
可以利用map来记录 某个字母出现的次数
map<char, int> m;//定义一个map叫做m,其中键是char类型,值是int类型
map是一类关联式容器。
功能:
自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
map<char,int> map1;//键,值的类型任意
特点:
是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。
对于迭代器来说,可以修改实值,而不能修改key。
注意事项:
使用map得包含map类所在的头文件
#include <map> //注意,STL头文件没有扩展名.h
map对象是模板类,需要关键字和存储对象两个模板参数:
std:map<
int
,string> personnel;
map的基本操作函数:
C++ maps是一种关联式容器,包含“关键字/值”对
begin
() 返回指向map头部的迭代器
clear
() 删除所有元素
count
() 返回指定元素出现的次数
使
用
count
,返回的是被查找元素的个数。 如果有,返回1;否则,返回0。 注意,
map
中
不存在相同元素,所以返回值只能是1或0。
empty
() 如果map为空则返回true
end
() 返回指向map末尾的迭代器
equal_range
() 返回特殊条目的迭代器对
erase
() 删除一个元素
find
() 查找一个元素
用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。
查找map中是否包含某个关键字条目用find
()
方法,传入的参数是要查找的key,在这里需要提到的是begin
()
和end
()两个成员,
分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.
当所查找的关键key出现时,它返回数据所在对象的位置,如果沒有,返回iter与end函数的值相同。
// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
map<int, string>::iterator iter;
iter = mapStudent.find(1);
if(iter != mapStudent.end())
cout<<"Find, the value is"<<iter->second<<endl;
else
cout<<"Do not Find"<<endl;
get_allocator
() 返回map的配置器
insert
() 插入元素
key_comp
() 返回比较元素key的函数
lower_bound
() 返回键值>=给定元素的第一个位置
max_size
() 返回可以容纳的最大元素个数
rbegin
() 返回一个指向map尾部的逆向迭代器
rend
() 返回一个指向map头部的逆向迭代器
size
() 返回map中元素的个数
swap
() 交换两个map
upper_bound
() 返回键值>给定元素的第一个位置
value_comp
() 返回比较元素value的函数
1004 结构体的使用
1005 vector的使用 sort函数
参考链接:
https://www.w3cschool.cn/cpp/cpp-i6da2pq0.html
常用用法:
vector动态数组_卑鄙的我-CSDN博客_动态数组vector
vector创建动态数组的时候有两种情况:
vector<数据类型> arr(数组长度大小,元素初值/数组某地址)
eg:
int n=5;
vector<int> arr[n];
vector<数据类型> arr(数组某地址,数组某某地址)
eg:
int s[]={4,1,55,45,6};
vector<int> arr(s,s+5);
vector<int>::iterator it;//声明一个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素 for(it=obj.begin();it!=obj.end();it++) { cout<<*it<<" "; }
sort() 函数位于
<algorithm>
头文件中
sort[first,last,cmp)
即:void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
对 [first, last) 区域内的元素做默认的升序排序
void sort (RandomAccessIterator first, RandomAccessIterator last);
按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序
降序:
bool cmp(int a, int b) {return a > b;}//sort的第三个参数,compare,函数返回大的,即从大到小排列
1006 略
1007 bool类型的使用
素数的判断
bool IsPrime(int n)
{
if(n <= 1){
return false;
}
for (int i = 2; i <=sqrt(n); i++)
{
if ((n % i) == 0){
return false;
}
}
return true;
}
1008 vector和algorithm库中reverse函数的使用
int n;
cin>>n;
vector<int> a(n);//创建一个容器,该容器容纳n个数
reverse[beg,end) 注意是左闭右开!!!
reverse()会将区间[beg,end)内的元素全部逆序;
1009 栈stack的使用
和其他序列容器相比,stack 是一类存储机制简单、所提供操作较少的容器。下面是 stack 容器可以提供的一套完整操作:
- top():返回一个栈顶元素的引用,类型为 T&。如果栈为空,返回值未定义。
- push(const T& obj):可以将对象副本压入栈顶。这是通过调用底层容器的 push_back() 函数完成的。
- push(T&& obj):以移动对象的方式将对象压入栈顶。这是通过调用底层容器的有右值引用参数的 push_back() 函数完成的。
- pop():弹出栈顶元素。
- size():返回栈中元素的个数。
- empty():在栈中没有元素的情况下返回 true。
- emplace():用传入的参数调用构造函数,在栈顶生成对象。
- swap(stack<T> & other_stack):将当前栈中的元素和参数中的元素交换。参数所包含元素的类型必须和当前栈的相同。对于 stack 对象有一个特例化的全局函数 swap() 可以使用。
更多参考链接:
http://c.biancheng.net/view/478.html
1010 flag=0控制输出空格数