小编min*_*mic的帖子

用多个线程填充矢量

我需要std::vector<unsigned int>用随机值填充一个巨大的(7734500元素),我试图与多个线程并行地实现它以实现更高的效率.这是我到目前为止的代码:

std::random_device rd; // seed generator

std::mt19937_64 generator{rd()}; // generator initialized with seed from rd

static const unsigned int NUM_THREADS = 4;


std::uniform_int_distribution<> initialize(unsigned long long int modulus)
{
    std::uniform_int_distribution<> unifDist{0, (int)(modulus-1)};
    return unifDist;
}


void unifRandVectorThreadRoutine
    (std::vector<unsigned int>& vector, unsigned int start,
    unsigned int end, std::uniform_int_distribution<>& dist)
{
    for(unsigned int i = start ; i < end ; ++i)
    {
        vector[i] = dist(generator);
    }
}


std::vector<unsigned int> uniformRandomVector
    (unsigned int rows, unsigned int columns, unsigned long …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading c++11

9
推荐指数
1
解决办法
2174
查看次数

用openCV检测嘴巴

我试图用openCV检测图像中的嘴,所以我使用以下代码:

#include "face_detection.h"

using namespace cv;

// Function detectAndDisplay
void detectAndDisplay(const std::string& file_name, cv::CascadeClassifier& face_cascade, cv::CascadeClassifier& mouth_cascade)
{
    Mat frame = imread(file_name);
    std::vector<Rect> faces;
    Mat frame_gray;
    Mat crop;
    Mat res;
    Mat gray;

    cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
    equalizeHist(frame_gray, frame_gray);

    // Detect faces
    face_cascade.detectMultiScale(frame_gray, faces, 1.1, 3, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    for(unsigned int i=0;i<faces.size();i++)
    {
        rectangle(frame,faces[i],Scalar(255,0,0),1,8,0);
        Mat face  = frame(faces[i]);
        cvtColor(face,face,CV_BGR2GRAY);
        std::vector <Rect> mouthi;
        mouth_cascade.detectMultiScale(face, mouthi);
        for(unsigned int k=0;k<mouthi.size();k++)
        {
        Point pt1(mouthi[k].x+faces[i].x , mouthi[k].y+faces[i].y);
        Point pt2(pt1.x+mouthi[k].width, pt1.y+mouthi[k].height);
        rectangle(frame, pt1,pt2,Scalar(0,255,0),1,8,0);
        }

    }

    imshow("Frame", …
Run Code Online (Sandbox Code Playgroud)

opencv cascade-classifier haar-classifier

6
推荐指数
1
解决办法
6655
查看次数

Makefile - 使用修改的头文件重建

在我的项目中,我有一些包含方法的头文件(例如用于模板类).所有这些头文件都包含在一个文件中header.h,然后包含在每个cpp文件中.这样,我必须在一个地方更改代码.还有一些.h没有相应.cpp文件的文件.
然后我有这个makefile:

# Makefile

.PHONY: run clean rebuild

CC     = g++
CFLAGS = -Wall -Ofast -std=c++0x -pthread
RM     = rm -f
EXEC   = main

SRC    = $(wildcard *.cpp)
OBJ    = $(SRC:.cpp=.o)

$(EXEC): $(OBJ)
    $(CC) $(CFLAGS) -o $@ $(OBJ)

%.o: %.cpp
    $(CC) $(CFLAGS) -c $^

run: $(EXEC)
    ./$(EXEC)

clean:
    $(RM) $(EXEC) *.o *.gch *~

rebuild: clean $(EXEC)
Run Code Online (Sandbox Code Playgroud)

一切正常,除了一个小而烦人的细节:如果我修改一个cpp文件,那么我可以做make,一切都正确更新,但如果我修改一个头文件,那么我必须删除所有内容并从头开始重新编译(这是我有那个丑陋的rebuild目标的原因),否则编辑将没有任何效果.

有没有办法在不重组整个代码的情况下让事情变得更好?

编辑

我试过这个makefile

.PHONY: run clean rebuild

CC     = g++
CFLAGS = -Wall …
Run Code Online (Sandbox Code Playgroud)

c++ makefile header-files

1
推荐指数
1
解决办法
1524
查看次数

C ++-从/ dev / urandom中提取随机数

我需要许多加密安全的数字,因此我正在考虑从中提取随机性/dev/urandom,然后将其“转换”为(例如)unsigned long long int。我想它应该非常有效,而且似乎在密码上是安全的,但是我将来会对此进行更多研究。
现在的问题是:我该怎么办?

我发现此代码:

char * block;
short size = 1;
ifstream urandom("/dev/urandom", ios::in|ios::binary);
urandom.read(block,size);
urandom.close();
Run Code Online (Sandbox Code Playgroud)

是否有意义?以及如何将我得到的转换为我想要的类型?

编辑-使用randomC ++ 11的接口

根据评论的建议,我尝试对整数使用均匀分布并将其random_device初始化为/dev/urandom。这是代码:

std::uniform_int_distribution<unsigned int> dist(0, modulus-1);
std::random_device urandom("/dev/urandom");
for(unsigned int i = start ; i < end ; ++i)
{
    vector[i] = dist(urandom);
}
Run Code Online (Sandbox Code Playgroud)

问题在于此代码比以前(我使用的是xorshift128 +生成器)慢了大约1000倍:5毫秒vs. 5秒钟。这正常吗?老实说,我认为从中传输字节/dev/urandom并将其转换为字节的unsigned int速度会更快...我是否缺少某些内容?

c++ random

1
推荐指数
1
解决办法
6090
查看次数