c++day7

目录

List

5.2​

5.3

1、已知C风格的字符串,完成对字符串通过下标访问时的异常处理机制(越界访问)

5.4


List

#include <iostream>
#include <list>
using namespace std;
void printlist(list<int> l){
    //迭代器
    //实例化一个迭代器
    list<int>::iterator iter;
    for(iter=l.begin();iter!=l.end();iter++){
        cout<<*iter<<" ";
    }
    cout<<endl;
}

int main()
{
    //构造函数
    //无参构造
    list <int> l;
    printlist(l);
    //构造n个元素拷贝给本身
    list<int> l1(2,11);
    printlist(l1);
    //区间拷贝
    list<int> l2(l1.begin(),l1.end());
    printlist(l2);
    //拷贝构造
    list<int> l3(l2);
    printlist(l3);

    //赋值
    //assign区间赋值
    l.assign(l1.begin(),l1.end());
    printlist(l);
    //assign赋值n个元素
    l.assign(3,12);
    printlist(l);
    //拷贝赋值
    l=l1;
    printlist(l);
    //swap,交换两个实例的元素
    list<int> l4;    //l4无参构造,为空
    l.swap(l4);
    printlist(l);
    printlist(l4);

    //list大小
    //size,返回容器中元素的个数
    printlist(l4);
    cout<<l4.size()<<endl;
    //empty,为空返回真
    cout<<l.empty()<<endl;  //l为空
    cout<<l4.empty()<<endl; //l4有两个元素
    //resize,重新设置容器的大小,
    //如果变小,多余的则删除
    //如果变大,多的补0
    l4.resize(3);
    printlist(l4);
    l4.resize(1);
    printlist(l4);
    //resize(n,elem),变长多余的用elem补充
    //变小,多余的删除
    l4.resize(4,16);
    printlist(l4);

    //插入删除
    //push_back尾插
    l4.push_back(21);
    printlist(l4);
    //pop_back尾删
    l4.pop_back();
    printlist(l4);
    //push_front头插
    l4.push_front(25);
    printlist(l4);
    //pop_front头删
    l4.pop_front();
    printlist(l4);
    //insert,插入函数
    //在迭代器指向的位置插入元素
//    l4.insert(l4.begin()+1,88);  报错,不能直接偏移迭代器
    //list偏移迭代器需要使用advance偏移
    //先实例化一个迭代器
    list<int>::iterator iter=l4.begin();
    advance(iter,1);              //迭代器往后pian偏移一个位置,指向第二个元素
    l4.insert(iter,88);
    printlist(l4);

    //在迭代器指向的位置插入n个元素
    l4.insert(iter,2,55);         //插入后迭代器,指向插入的元素
    printlist(l4);
    l4.insert(iter,2,33);
    printlist(l4);

    //在pos位置区间插入,在l4开始的位置插入l1
    l4.insert(l4.begin(),l1.begin(),l1.end());
    printlist(l4);

    //erase删除迭代器指向的元素
    l4.erase(l4.begin());
    printlist(l4);

    //erase删除迭代器指向的区间的元素
//    l4.erase(l4.begin(),l4.end());
//    printlist(l4);

    //clear,清空容器中的所有元素
//    l4.clear();
//    printlist(l4);
    //remove(elem)函数容器中和elem值匹配的元素
    l4.remove(11);
    printlist(l4);

    //数据存取
    //front(),list的第一个元素,返回值是引用,可以修改容器中的值
    l4.front()=2;
    cout<<l4.front()<<endl;

    //back(),容器的最后一个元素
    cout<<l4.back()<<endl;
    return 0;
}

 5.2

#include <iostream>

using namespace std;
class Num
{
private:
    int a;
public:
    Num() {}
    Num(int a):a(a){}
    //设置a的值
    void set(int a){
        this->a=a;
    }
    //1-a的和
    void Sum(){
        if(a<1){
            cout<<"a<1"<<endl;
            return;
        }
        int sum=0;
        for(int i=1;i<=a;i++){
            sum+=i;
        }
        cout<<"Sum="<<sum<<endl;
    }
    //1-a的乘积
    void Porduct(){
        if(a<1){
            cout<<"a<1"<<endl;
            return;
        }
        int product=1;
        for(int i=1;i<=a;i++){
            product*=i;
        }
        cout<<"Product="<<product<<endl;
    }
    //1-a的所有质数
    void PrimeNumber(){
        if(a<1){
            cout<<"a<1"<<endl;
            return;
        }
        cout<<"PrimeNumber:";
        for(int i=2;i<=a;i++){
            int flag=0;
            for(int j=2;j<i;j++){
                if(i%j==0){
                    flag++;
                }
            }
            if(0==flag){
                cout<<i<<" ";
            }
        }
    cout<<endl;
    }
};
int main()
{
    Num num1;
    num1.set(10);
    num1.Sum();
    num1.Porduct();
    num1.PrimeNumber();
    return 0;
}

5.3

1、已知C风格的字符串,完成对字符串通过下标访问时的异常处理机制(越界访问)

#include <iostream>
#include <cstring>
using namespace std;

class Str
{
private:
    char *str;
    int size;
public:
    Str() {}
    Str(const char *str):str(nullptr),size(0){
        size=strlen(str);
        this->str=new char[size+1];
        strcpy(this->str,str);
    }
    char &at(int pos){
        if(pos>=size){
            throw char(1);
        }
        return *(str+pos);
    }
};
int main()
{
    Str s1("hello");
    cout<<s1.at(3)<<endl;
    cout<<s1.at(5)<<endl;
    return 0;
}

#include <iostream>

using namespace std;
class A
{
private:
    static char a;
public:
    A() {}
    static void MyGetChar(){
        if(a>'9'){
            a='0';
        }
        cout<<a;
        a++;
    }
};
char A::a='0';
class B
{
private:
    static char b;
public:
    B() {}
    static void MyGetChar(){
        if(b>'z'){
//            cout<<endl;
            b='a';
        }
        cout<<b;
        b++;
    }
};
char B::b='a';
int main()
{
    for(int i=0;i<26;i++){
        if(i<20){
            A().MyGetChar();
        }
        B().MyGetChar();
    }
    cout<<endl;
    for(int i=0;i<26;i++){
        if(i<20){
            A().MyGetChar();
        }
        B().MyGetChar();
    }
    return 0;
}

 

5.4

#include <iostream>

using namespace std;
class A
{
private:
    string str;
public:
    A() {}
    A(string str):str(str){
        int j=0;
        for(unsigned int i=0;i<this->str.size();i++){
            if(this->str.at(i)>='a'&&this->str.at(i)<='z'){
                this->str.at(j)=this->str.at(i);
                j++;
            }
        }
        this->str.resize(j);
    }
    void dump(){
        char temp;
        for(unsigned int i=0;i<str.size()-1;i++){
            for(unsigned int j=0;j<str.size()-1-i;j++){
                if(str.at(j)>str.at(j+1)){
                    temp=str.at(j);
                    str.at(j)=str.at(j+1);
                    str.at(j+1)=temp;
                }
            }
        }
        cout<<str<<endl;
    }

};
class B
{
private:
    string str;
public:
    B() {}
    B(string str):str(str){
        int j=0;
        for(unsigned int i=0;i<this->str.size();i++){
            if(this->str.at(i)>='0'&&this->str.at(i)<='9'){
                this->str.at(j)=this->str.at(i);
                j++;
            }
        }
        this->str.resize(j);
    }
    void dump(){
        char temp;
        for(unsigned int i=0;i<str.size()-1;i++){
            for(unsigned int j=0;j<str.size()-1-i;j++){
                if(str.at(j)>str.at(j+1)){
                    temp=str.at(j);
                    str.at(j)=str.at(j+1);
                    str.at(j+1)=temp;
                }
            }
        }
        cout<<str<<endl;
    }
};
int main()
{
    string str;
    cin>>str;
    A a(str);
    a.dump();
    B b(str);
    b.dump();
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值