PTA乙级 十题总结

  • Post author:
  • Post category:其他



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控制输出空格数



版权声明:本文为weixin_40174368原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。