c++ 常用的函数

1,计算变量大小

_msize  #计算new出来的内存大小,单位是字节

sizeof    #计算数据类型大小,比如int是4字节,mat是96字节,vector不管多大都是32字节

strlen    #数组中由多少个元素

2,printf的格式化字符串参数

打印double:%f

打印long:ubuntu是这样的:%ld(因为在ubuntu中,long有8个字节)

 

 

顺带补充一下,以十六进制为例,
%02x表示占宽两位,不足的用0补齐,比如,0x01本应该输出1,但是补齐以后输出01

%.2x表示最少显示2位数字,

所以对于十六进制来说,02x和.2x差别不大,但是对于浮点数来说,.2一般表示小数点后两位哈,别整错了

 3,时间相关

windows上可用,据说此方法是cpu计时,也不甚准确,

#include <time.h>
#include <windows.h> //时间的头文件 clock_t start,ends; //clock_t实际上就是一个long start=clock(); //从开启这个程序进程 到 程序中调用clock()函数时 之间的毫秒数 Sleep(50); ends=clock(); cout<<ends-start<<endl; //此函数常用于计算时间差

可以尝试这个

Windows: 
QueryPerformanceCounter 
QueryPerformanceFrequency

 

ubuntu上不建议使用clock,据说计时不准,可以参考如下代码:

#include <sys/time.h>
#include <stdio.h>
#include <unistd.h>
using namespace std;
//如下好像是sys/time.h内置的时间结构
//struct timeval{
//      long tv_sec;
//      long tv_usec;
//};
//struct timezone{
//      int tz_minutesweat;
//      int tz_dsttime;
//};

int main(){
  struct timeval t1,t2;
  gettimeofday(&t1,NULL);
  int suma;
  for(int a=0;a<10000;a++){
      suma=suma+a;
  };
  sleep(10);
  gettimeofday(&t2,NULL);
  double timegap=(t2.tv_sec-t1.tv_sec)*1000+(t2.tv_usec-t1.tv_usec)*1.0/1000;
   //记得乘以1.0不然没有小数后的几位
  printf("tv1:%ld,%ld\n",t1.tv_sec,t1.tv_usec);
  printf("tv2:%ld,%ld\n",t2.tv_sec,t2.tv_usec);
  printf("timegap:%f\n",timegap);
}

编译命令:

gcc timetest.cpp -o out -std=c++11 -lstdc++

 4,fstream读取或者写出文件流

原作者写得灰常好,望尘莫及,直接跳转吧。链接

#include <iostream>
#include <fstream>
using namespace std;
int main() {
    char filepath[255];
    sprintf_s(filepath,"%s","D:\\ctest\\Project1\\x64\\Release\\1.log");
    std::ifstream t(filepath, std::ios::binary);
    //std::ios::binary以二进制方式打开,主要和\r\n换行符有关系
    t.seekg(0, ios::end);
    int loglength = t.tellg();//单位是字节数,注意,返回的长度将\r\n也计算在内
    printf("stream length: %d\n",loglength);
    return 0;
}
//以上是求log文件中有多少字节数据的方法,ps:vs2015

 

posted @ 2020-04-17 10:01  0点0度  阅读(473)  评论(0编辑  收藏  举报