1) Я хочу передать указатель QVector функции, а затем делать с ней что-то. Я попытался это:Передача указателя QVector как аргумента
void MainWindow::createLinearVector(QVector<float> *vector, float min, float max)
{
float elementDiff=(max-min)/(vector->size()-1);
if(max>min) min -= elementDiff;
else min += elementDiff;
for(int i=0; i< vector->size()+1 ; i++)
{
min += elementDiff;
*(vector+i) = min; //Problematic line
}
}
Однако компилятор дает мне «не подходит для оператора =» для *(vector+i) = min;
линии. Каким может быть лучший способ выполнить такие действия на QVector?
2) Функция должна линейно распределять значения для вектора для графика, как работает оператор matlab:, например vector (a: b: c). Каков самый простой и лучший способ выполнить такие вещи в Qt?
EDIT:
С помощью здесь исходная задача решена. :)
Я также улучшил метод в себе. Точность может быть значительно улучшена за счет использования линейной интерполяции вместо нескольких дополнений, как указано выше. При многократном добавлении происходит накопление ошибки, что в значительной степени устраняется линейной интерполяцией.
Btw, оператор if в первой функции был ненужным и можно удалить, просто переставив материал немного даже в метод множественного добавления.
void MainWindow::createLinearVector(QVector<double> &vector, double min, double max)
{
double range = max-min;
double n = vector.size();
vector[0]=min;
for(int i=1; i< n ; i++)
{
vector[i] = min+ i/(n-1)*range;
}
}
Я рассмотрел возможность использования какой-то зачарованной петли для этого, но было бы более практичным? С помощью, например, цикла foreach, мне все равно придется увеличивать некоторую переменную для правильной интерполяции? А также сделать условие для пропуска первого элемента?
Вы пытаетесь присвоить 'float'' QVector'. Это не разрешено, но действительно ли это то, что вы хотите сделать? – juanchopanza
Я хочу разместить поплавок в определенном месте в QVector. Это разрешено оператором [], но не тогда, когда «вектор» является указателем. Я также попытался пройти по ссылке. Тогда [] был в порядке, но вместо этого вызов от & myVector не был разрешен. – user3050215
Затем не передавайте указатель. Или спросите, как вызвать перегруженных операторов из указателей. – juanchopanza