zoukankan      html  css  js  c++  java
  • 2021.07.14牛客学习

    牛客学习知识点

    1. c语言逗号运算符,这个经常会不注意,但平时经常写的int a,b=9;肯定是给b赋值,所以cout<<(a,b);肯定是输出b

    2. vector迭代器erase掉一个元素会使后面的所有迭代器失效,所以要使用一个迭代器去接返回值

      it = v_obj.erase(it++);
      
    3. std::setw :需要填充多少个字符,默认填充的字符为' '空格

      std::setfill:设置std::setw将填充什么样的字符,如:std::setfill('*')

      std::setbase(n):将输出数据转换为n进制

      std::setprecision():控制输出流显示浮点数的数字个数,C++默认的流输出数值有效位是6。

      #include <iostream>
      #include <iomanip>
      #include <sstream>
      #include <shlobj.h>
       
       
      //AppData
      std::wstring GetUserAppDataDir()
      {
          std::wstring appdata;
          wchar_t buffer[MAX_PATH];
          ::ZeroMemory(buffer, MAX_PATH*sizeof(wchar_t));
          if (::SHGetSpecialFolderPath(NULL, buffer, CSIDL_APPDATA, NULL))
              appdata = buffer;
       
          if (appdata.substr(appdata.length() - 1) != L"\")
          {
              appdata.append(L"\");
          }
          return appdata;
      }
       
      //生成日志文件路径
      std::wstring GetLogFileName()
      {
          SYSTEMTIME sysTime;
          ::GetLocalTime( &sysTime );
       
          std::wstringstream logFileName;
          logFileName << GetUserAppDataDir().c_str() << L"_"
              << sysTime.wYear << L"_"
              << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wMonth << L"_"
              << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wDay << L"_"
              << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wHour << L"_"
              << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wMinute << L"_"
              << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wSecond << L".log";
          return logFileName.str();
      }
      //字符串转数字
      template <class T> T to_num( const char* s )
      {
          T tmp(0);
          std::istringstream is(s);
          is >> std::setbase(10) >> tmp;//setbase(n):将输出数据转换为n进制
          if(is.fail())
          {
              return 0;
          }
          return tmp;
      };
      //测试代码
      int main()
      {
          int a = 1;
          int b = 2;
          char c = '$';
          //输出:   1
          std::cout << std::setw( 4 ) << a << std::endl;
          //输出:$$$1
          std::cout << std::setw( 4 ) << std::setfill( c ) << a << std::endl;
          //输出:$$$12
          std::cout << std::setw( 4 ) << std::setfill( c ) << a << b << std::endl;
          //输出日志文件路径
          std::wcout << GetLogFileName().c_str() << std::endl;
          std::cout << "
      " << std::endl;
          //std::setbase()的使用
          int num = to_num<int>("1234");
          long ldata = to_num<long>("123456");
          std::cout << num << std::endl;
          std::cout << ldata << std::endl;
          std::cout << "
      " << std::endl;
          std::cout << "255(2进制): " << std::setbase(2) << 255 << std::endl;//二进制输出
          std::cout << "255(8进制): " << std::setbase(8) << 255 << std::endl;//八进制输出
          std::cout << "255(16进制): " << std::setbase(16) << 255 << std::endl;//十六进制输出
          //setprecision()的作用: 控制输出流显示浮点数的数字个数(C++默认的流输出数值有效位是6)
          //如果与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。
          //setiosflags(ios::fixed)是用定点方式表示实数。
          //setiosflags(ios::scientific)是用指数方式表示实数。
          std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(8) << 12.123456 << std::endl;
          //如果与setiosflags(ios::scientific)合用,可以控制指数表示法的小数位数。
          //在用浮点表示的输出中,setprecision(n)表示有效位数。
          //在用定点表示的输出中,setprecision(n)表示小数位数。
          system("pause");
          return 0;
      }
      
    4. 派生类无论是public、protected、private继承,都能够访问和修改基类的public和protected成员,而派生类对象仅当public继承时才能够访问和修改基类成员,因此在基类中定义的protected成员在私有继承的派生类中可访问可修改的

  • 相关阅读:
    Java HashMap 和 ConcurrentHashMap
    递归算法应用
    二叉树基础知识
    自动删除qq空间说说
    移动APP测试的22条军规--笔记
    SQL Server数据库状态监控
    SqlSugar-事务操作
    详解第一范式、第二范式、第三范式、BCNF范式
    SQL 日期
    2019年世界各国gdp排名对比
  • 原文地址:https://www.cnblogs.com/sunnylinry/p/15013221.html
Copyright © 2011-2022 走看看