2015-08-11 5 views
0

Я wrinting функцию, где нужно соблюдать следующий интерфейс:Копирование векторов из постоянных переменных

double logDensity(double x, PDFType type, 
        std::vector<std::vector<double const *> > const &parameters, 
        double const *lower, double const *upper) const; 

Мне нужно разделить этот parameters вектор на два вектора внутри этой функции:

vector<double> f = (parameters[0]); 
vector<double> t = (parameters[1]); 

Однако этот код приводит меня к этим сообщениям об ошибках:

DPwexp.cc: In member function 'double pwexponential::DPwexp::logDensity(double, PDFType, const std::vector<std::vector<const double*> >&, const double*, const double*) const': 
DPwexp.cc:38:38: error: conversion from 'const std::vector<const double*>' to non-scalar type 'std::vector<double>' requested 
vector<double> f = (parameters[0]); 
           ^

Что лучший способ скопировать эти два вектора в новые переменные внутри моей функции?

Спасибо!

ответ

1

Если параметры передаются по const&, то намерены было не менять их внутри функции. Зачем вам нужно копировать им? Прототип предполагает, что вы будете работать с значениями параметров без изменения.

const vector<double const*>& f = (parameters[0]); 
const vector<double const*>& t = (parameters[1]); 
+0

Я не могу правильно использовать значения, если я устанавливаю их как константы. Например, я не могу их повторять и другие значения. Могу я? –

+1

Вы можете выполнять итерацию const_iterator, вы можете не только изменять значения. Что такое «... другие ценности от них»? –

+0

'DPwexp.cc:47:24: ошибка: недопустимые операнды типов 'const double * const' и 'double' to binary 'operator *' ref [0] = f [0] * dif [0];' –

1

Вы можете использовать:

// Create f with the right number of elements. 
std::vector<double> f(parameters[0].size()); 

// Use std::transform to convert pointers to double and 
// store them in f. 
std::transform(parameters[0].begin(), parameters[0].end(), 
       f.begin(), [](double const* in) { return *in; }); 

// Similarly for t. 
std::vector<double> t(parameters[1].size()); 
std::transform(parameters[1].begin(), parameters[1].end(), 
       t.begin(), [](double const* in) { return *in; }); 
Смежные вопросы