Я довольно новичок в C++, однако, я пытаюсь создать соль и перечный шум. Это почти закончено, только промежуточный я хочу перетасовать массив ints и независимо от того, что я делаю, и независимо от того, какую функцию тасования я использую, я всегда получаю отвратительное «требуемое отсюда», которое ничего мне не говорит. Вот мой код:C++ - shuffle: требуется отсюда
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <random>
#include <algorithm>
#include <iterator>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
cv::Mat m(256, 256, CV_8UC1, cv::Scalar(255));
// Print it
// int counter = 0;
unsigned int range = 255 - 0 + 1;
int num = rand() % range ;
int x[256];
for (int i = 0; i<256; i++){
x[i]= i;
}
srand(17);
auto engine = std::default_random_engine{};
shuffle(x[0], x[255], engine);
int coord[256][256];
for (int t= 0; t<256; t++){
coord[t][t] = x[t];
}
for (int j = 0; j<256; j++){
for (int k = 0; 0<256; k++)
{if (coord[j][k]<=num){
cv::Mat black(m, cv::Rect(j, k, 1, 1));
black = cv::Scalar(0, 0, 0);
}
}
}
// Create a named window
cv::namedWindow("Test", cv::WINDOW_AUTOSIZE);
// Display
imshow("Test", m);
// Wait until a key is pressed
cv::waitKey(0);
return 0;
};
Ошибку я, кажется, вызвано этой линии:
shuffle(x[0], x[255], engine);
Теперь я счастлив дать полный текст компилятора, но некоторые линии так долго, что невозможно сделать необходимые отступы, я пробовал. У кого-нибудь есть обходной путь?
В будущем, пожалуйста, предоставьте [mcve], с подчеркнуть, на * минимальный *. Проблема полностью не связана с opencv и этими циклами и т. Д. –
Также 'srand' не будет засеять ваш' std :: default_random_engine', который, как вам кажется, ожидается. Прочтите [doc] (http://en.cppreference.com/w/cpp/numeric/random). –