Vector / Массив в целое число - PullRequest
0 голосов
/ 21 октября 2011
-(void)userShow{
    xVal = new vector<double>();
    yVal = new vector<double>();
    xyVal = new vector<double>();
    xxVal = new vector<double>();
    value = new vector<double>();
for(it = xp->begin(); it != xp->end(); ++it){
    xVal->push_back(it->y);
    xxVal->push_back(it->x);

}
for(it = yp->begin(); it != yp->end(); ++it){
    xyVal->push_back(it->x);
    yVal->push_back(it->y);
}

    for (int i = 0; i < xVal->size(); i++){
        int c = (*xVal)[i];
        for(int i = 0; xyVal[i] < xxVal[i]; i++){
           double value = yVal[c-1] + (yVal[c] - yVal[c-1])*(xxVal[i] - xyVal[c-1])/(xyVal[c] - xyVal[c-1]);
            yVal->push_back(value);
        }
    }
}

У меня проблема с частью double value = ... моего кода. Я получаю три ошибки, говорящие invalid operands to binary expression ('vector<double>' and 'vector<double>'), указывающие на c.

должно int c = (*xVal)[i]; быть double c = (*xVal)[i];, когда я пытаюсь использовать double, я получаю 6 ошибок, говорящих Array subscript is not an integer. Что означает, что мне нужно преобразовать массив в целое число. Как получить массив, если я использую векторы? Просто много путаницы на данный момент.

Не совсем уверен, действительно ли мне нужно объяснять, что должен делать код, но помогает ли это. Я пытаюсь получить его так, чтобы два вектора разбили векторы x и y на x и y. затем возьмите y из xp и y из yp и сложите их вместе. но поскольку векторы xp и yp не совпадают, мне нужно использовать цикл for и алгоритм двойного значения, чтобы получить достойный набор чисел.

1 Ответ

3 голосов
/ 21 октября 2011

c в порядке.Проблема действительно в double value = .., как говорит ваш компилятор.У вас есть указатели, поэтому вы не можете получить доступ к таким элементам массива, как это:

double value = yVal[c-1] + ...

Это должно быть

double value = (*yVal)[c-1] +

То же самое для xyVal, xxVal и т. Д.Вам нужно исправить весь внутренний цикл for.


Но почему вы выделяете vector вот так ...?Есть ли причина использовать new?Это так подвержено ошибкам.Я бы использовал

vector<double> xVar;

вместо

xVal = new vector<double>();

И затем использовал бы . вместо -> в сочетании с *.Намного проще.


Ах, забыл про вопрос для c - нет, не должно быть double.Вы не можете использовать числа с плавающей запятой для индексов.Кроме того, если xVal должен содержать целые числа (чтобы их можно было использовать для индексов), почему бы вам просто не объявить vector как vector< int > вместо vector< double >?Я не понимаю, какая логика в вашей программе, но похоже, что она (логика) должна быть улучшена, ИМО.

...