• c++ 常用小代码


    排序:

    先按箱子高度排序,再按箱子面积排序

    # =================================先按箱子高度排序,再按箱子面积排序==================================
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    struct Rect{
      double l; 
      double w;
      double h;
      void print()
      {
          std::cout << "lwh: "<<l << " "<<w<<" "<<h<<std::endl;
      }
    };
    
    
    int main()
    {
        Rect r1 = {0.3,0.4,0.5};
        Rect r2 = {0.4,0.4,0.5};
        Rect r3 = {0.1,0.2,0.6};
        
        vector<Rect> vRect = {r1,r3,r2};  // r3 r2 r1  
        
        std::sort(
            vRect.begin(),vRect.end(),[&](Rect a,Rect b){
                if(a.h == b.h)
                {
                    return a.l*a.w > b.l*b.w;
                }
                return a.h > b.h;
            }
            );
        for(auto r:vRect)
        {
           r.print();
        }
    
        
    
        return 0;
    }

    rand  rand_r      

    #include <stdio.h> // for printf()  
    #include <pthread.h> // p thread 's p is protable(POSIX Portable Operating System Interface) // 可移植的  // for pthread_create()  
    #include <string.h> // for strerror()  
    #include <unistd.h> // for sleep()  
    #include <stdlib.h> // for srand rand 
    
    
    pthread_t tids[2];
    
    void* doSomething(void* arg){
    
        pthread_t tid = pthread_self();
        srand(time(NULL));
    
        if(pthread_equal(tid,tids[0])){
            // first thread  
            printf("first thread processing...\n");
            for(int i=0;i<10;i++)
            {
                printf("i= %d | %d in thread1\n",i,rand());
                
            }
    
        }else{
            // second thread  
            printf("second thread processing...\n");
            for(int i=0;i<10;i++)
            {
                printf("i= %d | %d in thread2\n",i,rand());
                
            }
    
    
        }
    
        return NULL;
    }
    
    
    int main(){
    
        int err;
        for(int i=0;i<2;i++){
            err = pthread_create(&tids[i],NULL,&doSomething,NULL);
            if(err != 0){
                printf("pthread_create failed,[%s]\n",strerror(err));
            }else{
                printf("pthread_create successfully\n");
            }
        }
    
        sleep(2);
    
        return 0;
    }
    rand_not_thread_safe.c
    #include <stdio.h> // for printf()  
    #include <pthread.h> // p thread 's p is protable(POSIX Portable Operating System Interface) // 可移植的  // for pthread_create()  
    #include <string.h> // for strerror()  
    #include <unistd.h> // for sleep()  
    #include <stdlib.h> // for srand rand_r
    
    
    pthread_t tids[2];
    
    void* doSomething(void* arg){
    
        int global_seed = *(int*)arg;
        pthread_t tid = pthread_self();
    
        if(pthread_equal(tid,tids[0])){
            int seed1 = global_seed+1;
            // first thread  
            printf("first thread processing...\n");
            for(int i=0;i<10;i++)
            {
                printf("i= %d | %d in thread1\n",i,rand_r(&seed1));
            }
    
        }else{
            int seed2 = global_seed+2;
            // second thread  
            printf("second thread processing...\n");
            for(int i=0;i<10;i++)
            {
    
                printf("i= %d | %d in thread2\n",i,rand_r(&seed2));
            }
    
    
       }
    
        return NULL;
    }
    
    
    int main(){
    
        int global_seed = time(NULL);
    
        int err;
        for(int i=0;i<2;i++){
            err = pthread_create(&tids[i],NULL,&doSomething,&global_seed);
            if(err != 0){
                printf("pthread_create failed,[%s]\n",strerror(err));
            }else{
                printf("pthread_create successfully\n");
            }
        }
    
        sleep(2);
    
        return 0;
    }
    rand_r_thread_safe.c
  • 相关阅读:
    QT移植详解
    如何构建Qt4.7.0嵌入式开发环境
    Qt触摸屏、键盘的驱动[转]
    【详解】如何编写Linux下Nand Flash驱动
    QT安装 -->Error: register or shift expression expected -- `orr r3,r2,lsl#16'
    QT环境搭建常见的bug解决 -->ld: cannot find –lbootstrap 错误
    SDK支付流程
    IOS与Unity交互
    Android
    [转]个人对AutoResetEvent和ManualResetEvent的理解
  • 原文地址:https://www.cnblogs.com/zach0812/p/15748225.html
Copyright © 2020-2023  润新知