目录

 

㈠练习题

㈡练习题

㈢练习题

㈣练习题


㈠练习题

⑴本题误区

注意提示性语句

⑵考察知识点

①选择结构的应用

②如何实现元素间的一一对应

③map,二维数组

⑶结题思路

本题可利用stl中map(映照容器)或字符型二维数组的方法进行求解.

⑷map容器常用知识点

map为映照容器,其内元素由一个键值和一个映照元素构成,键值与映照元素具有一一对应的关系。
类似于数学中的一次函数x为键值,y为映照元素
⑴构造方法:map<键值数据类型,映照元素数据类型> m;
⑵常用到的函数:
①	m[key]=elem;		//将elem插入到键值为key的元素中
②	m.erase(key);		//删除键值为key的元素
③	m.find(key);		//搜索键值为key的位置,若无此元素,返回end()迭代器的位置
⑶map中元素的遍历(需要用迭代器进行遍历)
①	迭代器的定义
map<键值数据类型,映照元素数据类型>::iterator it;
②	迭代器的遍历
for(it=m.begin();it!=m.end();it++)
③	遍历状态说明
it->first;		//代表键值
it->second		//代表映照元素

㈡练习题

⑴本题误区

注意题目所给的要求为:删除第2个元素,然后对除第一个元素和最后一个元素外的元素进行去重和按从大到小的顺序排列.而并非对所有元素.

⑵考察知识点

①元素的去重

②元素的排序

③set容器的用法

④set的自定义排序

⑶解题思路

本题可利用stl中set(集合容器)的自动排序和去重来简化运算

⑷set容器常用知识点

set为集合容器,它相对于vector容器来说可以实现自动从小到大进行排序和去重的操作。
⑴	构建方法:set<数据类型> s;
⑵	常用到的函数有:
①	s.insert(n); 		// 插入n,如果n重复出现,不做操作
②	s.erase(n); 		// 删除键值为n的元素
③	s.clear(); 		// 清空
④	s.find(n); 		// 查找键值为n的元素
⑤	s.begin(); 		// 起始位置
⑥	s.end(); 		// 结束位置
⑦	s.size(); 		// 返回向量v的大小
⑧	s.empty(); 		// 判断向量是否为空

㈢练习题

⑴本题误区

注意0和负数的情况

⑵考查知识点

①二进制的转换

②元素的反序输出

③bitset容器的使用

④原码,反码,补码的含义

⒈原码:一个正数,按照绝对值大小转换成的二进制数;

              一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。

⒉反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。

3.补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

⑶解题思路

本题可利用数位分割的方法,即每次对2取余,最后结果逆序输出

也可利用位容器来解决

⑷bitset容器常用知识点

创建bitset对象
	必须指定位容器大小,一经定义不能修改
    bieset<100000> b;     // 100000个bit(位),此时所有元素为都为0
b.any();         // 判断b中是否存在值为1的二进制位
b.none();        // 判断b中不存在值为1的二进制位
b.count();       // 返回b中值为1的二进制位的个数
b.size();        // 返回b中二进制位的个数
b.test(p);       // 判断位置p处的二进制位是否为1
b.set();         // 把b的所有二进制位都置为1
b.set(p);        // 把位置p处的二进制位置为1
b.set(p,n);      // 把位置p处的二进制位置为n,n为0或1
b.reset();       // 把b的所有二进制位都置为0
b.reset(p);      // 把位置p处的二进制位置为0
b.flip();        // 把b的所有二进制位逐位取反
b.flip(p);       // 把位置p处的二进制位取反

⑸本题用位容器解法代码

#include<iostream>
#include<bitset>
#include<algorithm>
using namespace std;
int main()
{
    int x,n,num,i;
    string s;
    bitset<16> b;
    cin>>n;
    while(n--)
    {
        num=0;
        cin>>x;
        b=x;
        num=b.count();
        if(num==0)
            cout<<num<<endl;
        else
        {
            for(i=0;i<16;i++)
            {
                if(b[i]==1)
                    num--;
                x=b[i];
                s.insert(s.end(),x+'0');
                if(num==0)
                    break;
            }
            reverse(s.begin(),s.end());
            cout<<s<<endl;
            s="";
        }
        b.reset();
    }
}

㈣练习题

⑴本题误区

绩点的计算,结构体的创建

⑵考察知识点

①结构体的创建

②结构体元素的录入

③结构体的排序

④结构体元素的访问

⑶解题思路

创建一个可存储学生信息的结构体,并按照要求要求进行排序

⑷结构体知识点解析

struct Student  //定义学生类结构体,里面包含学生信息
{
    string name;    //名字
    double ma;
    double en;
    double th;
    double pj;
    bool operator <(const Student &a) const //自定义排序规则
    {
        if(a.pj!=pj)
            return a.pj<pj; //从大到小
        else if(a.ma!=ma)
            return a.ma<ma; //从大到小
        else if(a.en!=en)
            return a.en<en; //从大到小
        else if(a.th!=th)
            return a.th<th;
        else
            return a.name>name; //从小到大
    }
};

struct Student stu[100];    //定义一个具有100个元素空间的结构体数组
stu[0].name;                //访问0号学生的姓名
stu[10].pj;                 //访问10号学生的pj值


另外结构体可以作为容器的元素
例:
multiset<Student> s;    //创建多重集合容器s(里面元素为学生类型)