zoukankan      html  css  js  c++  java
  • 【现代程序设计】【homework-08】

    1. 理解C++变量的作用域和生命周期

    #include<stdio.h>
    
    char * test()
    {
     char s[10]="1";
    return s;  
    }
    
    main()
    {
     puts(test());
    }


    test在调用结束后

    系统给test分配的资源全部被释放

    主函数main  调用test()所得到的值,将不会是期望的值1

    截图:

    2. 理解堆和栈,两种内存的申请和释放的方式

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

    2、堆  一般由编程者分配释放, 若编程者不释放,程序结束时可能由OS回收 。它与数据结构中的堆是两回事,分配方式类似于链表。

     int a = 0; 全局初始化区 
    char *p1; 全局未初始化区 
    main()  { 
     int b; 栈 
    char s[] = "abc"; 栈
     char *p2; 栈 
    char *p3 = "123456"; 123456在常量区,p3在栈上
    
    p1 = (char *)malloc(10);
     p2 = (char *)malloc(20);
    
    分配得来得10和20字节的区域就在堆区。
    
    strcpy(p1, "123456"); 123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 
     }
    
    申请方式
    
    stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间
    
    heap: 需要编程者自己申请,并指明大小
    
    在c中malloc函数 如int *p1 = (int *)malloc(10);
    
    在C++中用new运算符 如int *p2 = new int[20]; 但是p1、p2本身是在栈中的。

    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

    unique_ptr:  该指针只能指向内存上的一个资源,该指针被删除时,绑定的资源也将被释放

     

    shared_ptr:对于内存上的统一个资源可以有多个不同的指针指向它,当所有指向该资源的指针都被删除时,该资源被释放

    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

    考察重点:

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

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

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

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

    5. 是否考虑url中的中文

    6. 算法是否简洁高效

    7. 代码风格

    c++0x风格

     1 //借助strtok实现split
     2 #include <string.h>
     3 #include <stdio.h>
     4 
     5 int main()
     6 {
     7         char s[100];
     8         const char *d = "/.:";
     9         gets(s);
    10         char *p;
    11         p = strtok(s,d);
    12         while(p)
    13         {
    14                 printf("%s,",p);
    15                 p=strtok(NULL,d);
    16         }
    17 
    18         return 0;
    19 }

    运行结果

    c++ stl 风格

    str 需要分割的string
    pattern 分割字符串的字符的string
    
    
    std::vector<std::string> split(std::string str,std::string pattern)
    {
        std::string::size_type pos;
        std::vector<std::string> result;
        str+=pattern;//扩展字符串以方便操作
        int size=str.size();
    
        for(int i=0; i<size; i++)
        {
            pos=str.find(pattern,i);
            if(pos<size)
            {
                std::string s=str.substr(i,pos-i);
                result.push_back(s);
                i=pos+pattern.size()-1;
            }
        }
        return result;
    }
  • 相关阅读:
    Eclipse/STS 常用快捷键
    Git代码管理常用命令
    Git命令
    Atom python版本的切换
    robot Frame之文件上传和下载
    ride打开后,log和report置灰的解决办法
    Python2和Python3共存下使用robotframework
    selenium+python
    firefox上安装selenium ide失败
    软件测试知识点补充1
  • 原文地址:https://www.cnblogs.com/lightz/p/3428400.html
Copyright © 2011-2022 走看看