PTA乙级 十题总结

1 篇文章 0 订阅

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值