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
原文地址:https://www.cnblogs.com/zach0812/p/15748225.html