PAT考试C++总结(六)

本文围绕C++展开,介绍了容器使用的相关知识。包括迭代器的使用、用find方法判断容器元素、vector的clear和erase函数、set和map容器的常用方法,还提及数组作函数参数、链表结点处理技巧以及避免超时的小技巧等信息技术相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.要指向容器内的某个对象应该使用迭代器,迭代器是指针的泛指,这里不可以用指针去指向容器对象,将会类型不匹配

2.判断容器内是否含有某元素可以使用STL中的find方法,使用时需加上头文件algorithm.

find(start,end,value)

所有的返回,均是迭代器(容器)或指针(数组),而非是直观感觉上的索引下标。如果在查找范围内不存在,返回a.end(),这里需要注意的是,a.end()不在查找范围内,如下例子:

vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
vector<int>::iterator it;
it=find(a.begin(),a.end(),4);
if(it!=a.end()){
//查找对象存在
}else{
//查找对象不存在
}

3.vector::clear()函数的作用是清空容器中的内容,但如果是指针对象的话,并不能清空其内容,必须要像以下方法一样才能达到清空指针对象的内容
vector::erase()用于清空容器中的内容以及释放内存,并返回指向删除元素的下一个元素的迭代器。
不过要注意的就是在erase以后erase之前确定的指针的指向可能会有变化,这时候使用erase之前的指针需要重新赋值,一开始因为这个问题折腾了半天

4.set常用方法(使用时需要加上头文件set):
初始化:set<type> name
返回容器第一个元素地址:begin()
返回容器终点地址:end()
返回容器元素个数:size()
删除容器所有元素:clear()
判断容器是否为空:empty()
插入元素:insert()
遍历set集合可以使用C++11中新定义的auto来定义迭代器指针,因为set集合的一些方法返回值比较复杂,所以直接用auto即可
要注意的是set容器里元素不是按照插入时的顺序,是按照哈希值来进行排序的

for(auto it=s.begin();it!=s.end();it++){
...
}

5.只要输入不结束就一直输入的写法

while(getline(cin,str))
        {
                cout<<str<<endl;
        }

6.map容器:(使用时需加上头文件map)
变量定义:map<type,type> name
如果没有初始化而且设置为int,那么默认值会为0,比如在你使用name[i]的时候,就已经为它自动初始化一个key为i,value为0的对象了
变量赋值:直接用数组写法即可,如:

map<int,int> a;
a[1]=10;

查找并返回位置指针:find()
清空map容器:clear()
判断map容器是否为空:empty()
返回第一个元素地址:begin()
返回容器终点地址:end()
遍历用迭代器从第一个元素地址遍历到最后就行了就行了

map<int,int> a;
a[0]=1;
map<int,int>::iterator it;
it=a.begin();
while(it!=a.end()){
cout<<it->first<<it->second;//it->first是map元素的key值,it->second是map元素的value值
it++;
}

7.C++中把数组作为函数参数:
如果是一维数组,可以用指针,定义长度的数组,未定义长度的数组;

void method(int *a){}
void method(int a[10]){}
void method(int a[]){}

如果是二维数组同理,只是第二个长度一定要定义

void method(int a[][10]){}

8.对于链表结点有个比较机智的处理方法,结构体只写data和next,然后用address作为数组下标,这样处理就省去了对链表排序的过程,需要调用下一个链表对象只需要list[list[i].next]就可以了 ,柳婼

9.有个避免超时的小技巧是,如果题目需要往容器放一些内容,可以使用map来将对应内容指向的index保存下来,这样在调用的时候可以少一次遍历的时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值