鱼C论坛

 找回密码
 立即注册
查看: 2596|回复: 0

[见证历程] c到c++过度 第五天笔记

[复制链接]
发表于 2018-4-30 11:36:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 代号3 于 2018-5-9 15:55 编辑


427笔记
STL
STL vector(动态数组 容器)
                增删查改
UML
                类和类之间的关系
                使用图形化描述类和类之间的关系
控制台编程
                光标属性
                                大小
                                是否隐藏
                                光标坐标
                控制台输出文本颜色设置
               
STL
        标准模板库        包含大量数据结构和算法部件
                                                        高可重用性 大量使用模板技术(泛型化编程)
                                                        c++标准一部分  不需要额外安装
        使用时机
                                操作大量元素时使用某种容器
                                c只有一种内置容器 数组  但数组必须提前确定大小 仅能保存数组 不能支持数据操作
        部件
                        容器
                                        存放数据的位置
                                        动态数组 栈~~~
                        算法
                                                方便对容器中的数据进行各种操作
                                                如排序 查找MAX元素
                        迭代器
                                        泛化指针类型
                                        若迭代器指向了容器中某个成员 迭代器将可以通过自增自减遍历容器中所有的成员
                                       
                                        联系容器和算法的媒介 算法操作容器的接口
        使用  后附代码示例
                        标准头文件名称和容器名一致
                        #        include<vector>
                        using std::vector
                       
                        容器都是基于模板实现        使用前必须先指明模板
                       
               
  1. #include<iostream>
  2.                         #include<vector>
  3.                         using namespace std;
  4.                         int main()
  5.                         {
  6.                                 vector<int> nVec;
  7.                                 vector<double> dVec;//定义对象
  8.                                
  9.                                 nVec.push_back(1);//添加新元素
  10.                                
  11.                                 vector<int>::iterator itr;//获取元素迭代器
  12.                                
  13.                                 itr=nVec.begin();//bigin返回是第0个元素的迭代器
  14.                                
  15.                                 nVec.insert(itr+2,5)//插入数据:形参1:迭代器用于表示位置 形参2:要插入的数据
  16.                                
  17.                                 int nVal=nVec[0];//取值                                                        访问动态数组中的元素
  18.                                 nVec[1]=100;
  19.                                
  20.                                 nVal=nVec.at(1);//访问动态数组中的元素 使用at()
  21.                                 nVec.at(0)=1011;
  22.                                
  23.                                 for(int i=0;i<nVec.size();i++)                                                                //查找:1·遍历vector查找指定的数据
  24.                                         {                                                                                                                                                        //vector.size()得到元素个数
  25.                                                         if(nVec[i]==2)
  26.                                                         {
  27.                                                                 cout<<"元素2在下标"<<i<<endl;
  28.                                                                 break;
  29.                                                         }
  30.                                         }
  31.                                        
  32.                                 for(auto itr=nVec.begin();        itr!=nVec.end();++itr)                //2·循环从0元素的迭代器开始       
  33.                                 {                                                                                                                                                                                        循环自增迭代器 迭代器指向下移               
  34.                                                 cout<<*itr;                                                                                                                                        end()返回值是最后一个元素的下一个       
  35.                                                 if(*itr==8)                                                                                                                                                位置
  36.                                                 {                                                                                                                               
  37.                                                         itr=nVec.erase(itr);                                                                                                                ??野指针 置空end()
  38.                                                         break;                                                                                                                        //
  39.                                                 }
  40.                                 }               
  41.                         }
  42.                        
复制代码

        vector(动态数组) 拥有拓展功能 连续存储空间
                       
                        支持[]符号快速随机访问 由于连续存储空间 在插入删除操作方面 效率比较慢
               
                成员
                        增        push_back                 在末尾添加一个元素
                                        insert                                插入一个元素
                                       
                        删        pop_back                删除最后一个元素
                                        erase                                删除某个元素
                       
                        查        size                                        得到字符串的大小       
                                        empty                                判断是否为空
                                        []                                                返回元素
                                        =                                                复制副本
                        其他
                                        重载运算符
                                        []  = > < >= <= != ==  
                       
                clear函数后遗症                                                                                                                       
       
  1. #include <iostream>  
  2.                 #include <sstream>  
  3.                 #include <string>  
  4.   
  5.                 using namespace std;  
  6.   
  7.                 int main()  
  8.         {  
  9.                         stringstream ss;  
  10.                         int i = 0;  
  11.                         for(i = 0; i < 5; i++ )  
  12.                 {  
  13.                         ss << "hello";  
  14.                         string s = ss.str();  
  15.                         cout << s.size() << endl;  
  16.          
  17.                         // 如下两部可彻底恢复ss  
  18.                         ss.clear(); // 恢复状态  
  19.                         ss.str(""); // 恢复值                  精髓                                
  20.                 }  
  21.         }
  22.                        
复制代码

                       
        示例                                          //代码在上
                增加元素
               
                        获取元素迭代器(定义对象 (迭代器))
                        vector<类型>  迭代器名
                       
                插入数据
                        形参1        迭代器 用于表示位置
                        形参2        要插入的数据
                       
        查找
                数组                                vector遍历                                vector.size()获取元素个数
               
                迭代器将可以通过自增自减遍历容器中所有的成员   
                end()指向最后一个元素的下一个位置(无效位置)                                       
                       
                itr是一个指向元素的迭代器(指针)可以使用*运算符来取得指向的内容(元素的地址)
               
        删除
       
        输出所有
               
  1. for(double &val:dVec)  auto 自动类型(变量自适应)
  2.                         {
  3.                                         cout<<val<<',';
  4.                         }
  5.                         cout <<endl;
复制代码

                       
                       
类与类的关系
       
        继承
                       
        组合
                       
        友元
       
                1)C++中引入友元函数,是为在该类中提供一个对外(除了他自己意外)访问的窗口;
                2)这个友元函数他不属于该类的成员函数,他是定义在类外的普通函数,
                只是在类中声明该函数可以直接访问类中的private或者protected成员               

                friend <返回类型> <函数名> (<参数列表>);
               
        使用友元函数注意的要点:

                        类中通过使用关键字friend 来修饰友元函数,但该函数并不是类的成员函数,其声明可以放在
        类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,
        不需要加类限定。
       
                        一个类中的成员函数可以是另外一个类的友元函数,而且一个函数可以是多个类友元函数。

                        友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,
        需要通过对对象进行引用。

                        友元函数在调用上同一般函数一样,不必通过对对象进行引用。       
               
UML图描述类
        UML   统一建模语言
       
        功能模型
                        用户角度展示系统功能
                        直观展示程序功能
       
        对象模型
                        采用对象 属性(成员变量) 操作(成员函数) 关联等概念展示系统的结构和基础
                        程序员角度分析程序功能
                                一个项目中的对象 属性 操作
       
        动态模型
                        展示系统的内部行为
                                展示每个方法的具体实现
                                伪代码示意
                               
        类图
                        描述系统中所包含的类以及它们之间的相互关系
                        帮助人们理解项目
                       
                类                        使用包含类名 属性 操作且带有分隔线的长方形来表示
                       
                        类名       
                                        必须有一个名字 字符串
                        属性
                       
                        成员变量
                                       
                                        可见性(访问控制符) 名称:类型[=默认值]
                                                公 +
                                                保 -
                                                私 #
                                               
                        操作
                                        可见性 名称(参数列表)[:返回值类型]
                                       
        关系
                        关联 类与类之间最常用关系                                        类属性
                                                结构化关系
                                                通常将一个类的对象作为另一类的成员量
                                               
                                        单向关联
                                                用带箭头的实线表示
                                               
                                        双向关联
                                                实线
                                                eg:班级类与学生类
                               
                                        自关联
                                                                                                //百度补充
                                                类的属性类型为类本身
                                               
                                        多重性关联
                                                                                                        //百度补充
                                                一对多
                                                eg:一个班级可以有N个学生 但一个学生只有一个班级
                               
                                聚合(弱性关联)
                                        成员变量关系       
                                        整体与部分可分离        各自拥有生命周期
                                        部分可以属于多个整体对象 可以为多个整体对象共享
                                                eg:计算机与CPU         公司与员工
                                                                class A {...}
                                                         class B { A* a; .....}
                                                                即类B包含类A的指针;
                                组合
                                        实心菱形(强性关联)
                                        eg:class A{...}
                                                 class B{ A a; ...}
                                                        即类B包含类A的对象。
                                                共享内存 A毁B毁
                               
                                        组合是关联关系的一种特例,体现是"包含一种XXX "的关系,        这种关系比聚合更强,
                也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的
                生命周期结束也就意味着部分的生命周期结束;
                                        比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;       
                       
                        依赖                假设A类的变化引起了B类的变化,则说B类依赖于A类。
                                        虚线箭头                        成员函数参数
                                依赖关系有如下三种情况:
                                        1、A类是B类中的(某中方法的)局部变量;
                                        2、A类是B类方法当中的一个参数;
                                        3、A类向B类发送消息,从而影响B类发生变化;
                                使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;
                         
                                       
                        泛化        A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)
                                        继承关系
                                        基类与子类关系
                                       
                        接口与实现
                                        带空心三角形的虚线
                                        接口使用抽象类实现(有纯虚函数的类)

        UML中,变量的定义形式为 :
                        变量名 : 变量类型 = 初始值.
                        eg:
                        定义成员变量:
                                m_x : int = 0
                                m_y : int
                        定义函数
                                move(x : int , y : int ) : int   等价于C中的 int move(int x , int y);       
                               
控制台编程
               
                头文件
                                #include<windouws.h>
                               
                        第一个参数为句柄 this指针
                                       
                                        标准输出句柄
                                                专门控制输出 光标位置 文字颜色
                                        标准输入句柄
                                                捕获鼠标在控制台中的坐标
                                                捕获按键
                       
  1. void show(HANDLE hStdOut,
  2.                                                                         const char* pStr,
  3.                                                                         SHORT x,SHORT y,
  4.                                                                         WORD color=0x0A(0x后面两位十六进制分别设置前后背景色))
  5.                                                 {
  6.                                                                 SetConsoleCursorPosition(hStdOut,{x,y});
  7.                                                                 SetConsoleTextAttribute(hStdOt,color);
  8.                                                                 cout<<pStr;
  9.                                                 }
  10.                                 int main()
  11.                                 {
  12.                                                 获取控制台操作句柄
  13.                                                
  14.                                 }
  15.                 设置光标属性
  16.                
  17.                         语法
  18.                        
  19.                                 参数 输出句柄       
  20.                                
  21.                         可见性和大小
  22.                        
  23.                         光标的坐标               
  24.                
  25.                
  26.                 设置文字颜色
  27.                 // 设置控制台光标信息(可见性,大小)
  28.         CONSOLE_CURSOR_INFO cci = { 0 };
  29.         cci.bVisible = FALSE;
  30.         cci.dwSize = 5;
  31.         SetConsoleCursorInfo(hStdOut,
  32.                                                  &cci );

  33.         cout << "HHHHH";
  34.         COORD pos = { 10,10 };
  35.         SetConsoleCursorPosition( hStdOut ,
  36.                                                           pos );
  37.         cout << "HHHHH";

  38.         // 设置文字颜色
  39.         SetConsoleTextAttribute( hStdOut ,
  40.                                                          0x0A );

  41.         for( int i = 0; i < 16; ++i ) {
  42.                 for( int j = 0; j < 16; ++j ) {
  43.                         WORD color;
  44.                         // i作为背景色
  45.                         // j作为前景色
  46.                         color = (i << 4) | j;
  47.                         // 设置颜色
  48.                         SetConsoleTextAttribute( hStdOut ,
  49.                                                                          color );
  50.                         cout << "■";
  51.                 }
  52.                        
  53.                
复制代码



本次为笔记最后一次更新 以后转为发经验总结之类的以点破面为目标的帖子 坚持ING~

428笔记.txt

10.14 KB, 下载次数: 0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 21:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表