• homework-08


    一,静态局部变量

    • 作用域:局部作用域(只在局部作用域中可见)
    • 生命周期:程序运行期一直存在
    • 内存分布:全局数据区
    • 定义方法:局部作用域用中用static定义

    局部变量

    • 作用域:局部作用域(只在局部作用域中可见)
    • 生命周期:程序运行出局部作用域即被销毁
    • 内存分布:栈区
    • 注意:auto指示符标示
    • #include"cstdio"
      using namespace std;
      int main()
      {
          int a = 0;
          int b = 0;
          scanf_s("%d%d",&a,&b);
          if (a < b)
          {
              int temp = 0;//局部变量,只在本判断语句里存在
              temp = b;
              b = a;
              a = temp;
          }
          printf("由大到小%d,%d", a, b);
          return 0;
      }
    • temp为局部变量,只在if里面使用,这就是局部变量作用及周期

    二:这个整个网上转载的居然是同一个博客。。。果然是前辈大神级任务

    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。

    大致看完了的总结就是,直接申请的变量,指针会自动分配到栈,速度快,系统自动分不可控进程,如果足够有水平,可以使用malloc函数强制分配空间,,这就是堆,这样使用自由,但是不好控制,需要熟练工;

    代码,只是照猫画虎:

    int a=0;
    //我是全局变量
    int main()
    {
         int a;
    //我进栈啦
         char *p1;  
         char *p2="afa";
    //我进栈啦
        p1 = (char *)malloc(10);
    //我进堆了
    }

    三:
    3. 理解unique_ptr和shared_ptr

    a) http://msdn.microsoft.com/en-us/library/vstudio/hh279676.aspx

    b) http://msdn.microsoft.com/en-us/library/vstudio/hh279669.aspx

    A unique_ptr不会共享它的指针。 无法将它复制到另一个unique_ptr,(除非它是可修改 rvalue) 通过值传递给函数,或需要对其进行复制的任何标准模板库 (STL) 算法中使用。 A unique_ptr只能移动。 这意味着内存资源的所有权将转移到新的unique_ptr和原始unique_ptr不再拥有它。 我们建议您将一个对象限制为一个所有者,因为拥有多个程序逻辑增加复杂性。 因此,当您需要为普通的 C++ 对象的智能指针,使用unique_ptr。

    shared_ptr 类型是智能指针在为方案设计多个所有者可能必须管理对象生存期内存中的 C++ 标准库中。 在初始化可以将它复制的 shared_ptr 后,将它在函数参数的值,并将其分配给其他 shared_ptr 实例。 所有实例指向同一对象,并且,对“的共享访问控制块”该引用计数的增量和减量,每当新shared_ptr 添加,超出范围或重新设置。 当引用计数达到零时,控制块删除内存资源和自身。

    不会啊,这尼玛是什么跟什么。。。。指针这种不稳定的东西。。。随着c++的逝去快跪了吧

    四:

    4. 请尝试用“C++0x”,“C++11 & STL”两种不同的代码风格分割一个url,并上传代码到博客上。

    For example:

    Input: http://msdn.microsoft.com/en-us/library/vstudio/hh279674.aspx

    Output: http, msdn, Microsoft, com, en-us, library, vstudio, hh279674, aspx

    那个说实在的,到现在c++的输入输出流都不是很清楚,最多用的还是标准c,java,对于这些大同小异的标准也无法区分,下面只是代码。。。

    #include"cstdio"
    #include"iostream"
    using namespace std;
    
    
    char token[100];//读入字符串url
    char beginletter[10];
    char words[50];
    int i = 0;
    int flag= 0;//分析是否合法url
    int type=0;//分析url类型
    
    void beginLetter()
    {
        char temp;
        temp = token[0];
        while (temp!= '/')
        {
            
            beginletter[i] = token[i++];
            temp = token[i];
            
        }
        beginletter[i] = temp;
        if (token[++i] == '/')
        {
            beginletter[i] = token[i];
            if (strcmp(beginletter, "http://") == 0)
        {
            //url合法性检测,以下类似
               i = 7;//双斜杠后起始位置
               type=1;
        }
        else if (strcmp(beginletter, "site://") == 0)
        {
               i = 7;
               type = 2;
        }
        else if (strcmp(beginletter, "ftp://") == 0)
        {
               i = 6;
               type = 3;
        }
        else if (strcmp(beginletter, "https://") == 0)
        {
                i = 8;
                type = 4;
        }
        else
        {
            cout << "error" << endl;
            flag = 1;
    
        }
        }
        else
        {
            cout << "error" << endl;
            flag= 1;
        }
        
        
    }
    //判断开头合法性以及输出,
    
    void hefa()
    {
        int m = i-1;
        while (token[m+1] != '')
        {
            if (((token[m] == '.') || (token[m] == '/')) && ((token[m+1] == '.') ||  (token[m+1] == '/')))
            {
                cout << "非法url" << endl;
                flag = 1;
                break;
            }
            m++;
        }
        
    }
    //初步检验url的合法性,由于不知道url具体标准,只是保证除了开头://之后不会出现“//”或者“。。”
    
    int main()
    {
        memset(token, 0, 100);
        memset(beginletter, 0, 100);
        cin >> token;
        beginLetter();
        hefa();
        if (!flag)
        {
            cout << "output:";
            switch (type)
            {
            case 1:
                cout << "http,"; 
                break;
            case 2:
                cout << "site,";
                break;
            case 3:
                cout << "ftp,";
                break;
            case 4:
                cout << "https,";
                break;
            default:
                break;
            }
            //合法性判断完了,按要求输出
            while (token[i] != '')
            {
                if ((token[i] != '.') && (token[i] != '/'))
                {
                    cout << token[i];
                }
                else
                {
                    cout << ",";
                }
                i++;
            }
        }
        
        return 0;
    }
    View Code

    考察重点:

    1. 类的定义和使用,基本成员是否完整

    2. 输入参数的检查及其他鲁棒性的考虑

    3. STL和C++11元素的使用

    4. 除http://之外, 是否有考虑ftp:// site:// 等情况

    5. 是否考虑url中的中文

    6. 算法是否简洁高效

    7. 代码风格

  • 相关阅读:
    pyqt的setObjectName()/findChild()
    pyqt的多Button的点击事件的槽函数的区分发送signal的按钮。
    分布式存储
    QTableWidget的表头颜色设置
    QListView的子项的ViewMode
    QHeaderView的点击和双击事件
    LeetCode(63):不同路径 II
    LeetCode(62):不同路径
    LeetCode(61):旋转链表
    LeetCode(60): 第k个排列
  • 原文地址:https://www.cnblogs.com/fireyjy/p/3428642.html
Copyright © 2020-2023  润新知