2015-10-24 2 views
-1

Я новичок в C++, поэтому заранее приношу извинения за небрежное программирование. У меня есть вектор вероятностей и еще один из значений x. Что мне нужно делать, чтобы накапливать вероятности, чтобы иметь увеличенную гистограмму, а затем генерировать случайное равномерное число и находить положение, где оно падает в xvales (ind в функции histc Matlab - [bincounts, ind] = histc (___) -). В конце концов, мне нужно сделать это для вектора случайных чисел, но я подумал, что я должен показать только одно число. Это то, что я до сих пор:C++ find bin позиция значения (гистограмма)

int main() { 
double nale=0; 
nale = rand_uniforme_1(0,1); // function that creates a uniform random nunber (it works already) 

double vx[] = {2,4,6,8}; 
std::vector<double> valorx(vx, vx+4); 

double vp[]={0.2,0.3,0.1,0.4}; 
std::vector<double> probab(vp, vp+4); 

// acumulate 
std::vector<double> proacum1(probab.size()); 
std::partial_sum (probab.begin(), probab.end(), proacum1); 

// add a 0 at the beggining 
std::vector<double> proacum(probab.size()+1); 
proacum[0]=0; 
for (int i = 0; i < proacum1.size(); ++i) { 
    proacum[i+1]=proacum1[i]; 
} 

// position of the uniform random number 
std::vector<double>::iterator low; 
low=std::lower_bound (proacum.begin(), proacum.end(), nale); 
int pos=(low- proacum.begin()); 


double value=valorx[pos]; 

std::cout << nale << "\n"; 
std::cout << value << "\n"; 

} 

Это дает мне ошибки:

-error: no viable overloaded '=' in low=std::lower_bound (proacum.begin(), proacum.end(), nale); 
-n instantiation of function template 
     specialization 'std::__1::partial_sum<std::__1::__wrap_iter<double *>, 
     std::__1::vector<double, std::__1::allocator<double> > >' requested here 
    std::partial_sum (probab.begin(), probab.end(), proacum1); 

и более, что я даже не понимаю.

+0

Одна очевидная проблема: последним аргументом 'std :: partial_sum' должен быть итератор. Вы передаете 'std :: vector '. Вероятно, вы захотите заменить 'proacum1'' proacum1.begin() 'в вызове' std :: partial_sum'. – crayzeewulf

ответ

-1
int pos=(low- proacum.begin()); 

Dereference this. Вы назначаете итератору int.

я не могу проверить это, потому что я не все используемые библиотеки и объявления функций, но я считаю,

int pos = *(low - proacum.begin) 

должно работать нормально.