написание функции sumVector: не возвращает значение - PullRequest
0 голосов
/ 16 февраля 2012

Я тренируюсь с функциями в классе векторов. я написал функцию «sumVector», чтобы сложить все элементы вектора «возраст», но он не возвращает сумму я копирую свой блок кода; я знаю, что STL обеспечивает функцию суммы, но это для моей собственной практики. Буду признателен, если кто-то укажет, что я делаю неправильно

    #include <vector>
    #include <fstream>
    #include <sstream>
    #include <iostream>
    #include <iterator>
    #include <algorithm>
    using namespace std;
    template<typename T>
    int sumVector(const vector<T> &integers2)
    {
         typename vector<T>::const_iterator constIterator;
         //display vector elements using constIterator
         for 

         (constIterator=integers2.begin();                                             
         constIterator!=integers2.end();++constIterator);
         int sum=0;
         sum+=*constIterator;
         return sum;
         cout<<sum;
    }




    int main ()
    {
    vector<int> ages;
    vector<float>var;
    ifstream inFile;
    inFile.open("data.txt");
    if(!inFile)
    {
        cout<<"didn't work";
        cin.get();
        exit (1);
    }

    string line;
    getline(inFile, line);
    istringstream in(line);
    copy(std::istream_iterator<int>(in),
      std::istream_iterator<int>(),
      std::back_inserter(ages));
    cout<<ages.at(2)<<endl;
    getline(inFile, line);
    istringstream gin(line);
    copy(istream_iterator<float>(gin),
                                     istream_iterator<float>(),
                                     back_inserter(var));
    cout<<var.at(0)<<endl;
    cout<<"whats the sum";
    sumVector (ages);

    cin.get();

    inFile.close();
    cin.get();

    }

Ответы [ 2 ]

4 голосов
/ 16 февраля 2012

Неверный цикл for и cout << sum происходит после return с sumVector().Тип возвращаемого значения (и тип sum) также должен быть T, в противном случае sumVector() ограничивается vector с элементами int (или типами, конвертируемыми в int с).

Что-то вроде следующего, я думаю, это то, что вы ищете:

template<typename T>
T sumVector(const vector<T> &integers2)
{
    typename vector<T>::const_iterator constIterator;
    T sum=0;
    //display vector elements using constIterator
    for (constIterator=integers2.begin();
         constIterator!=integers2.end();
         ++constIterator)
    {
        sum+=*constIterator;
    }

    cout<<sum;
    return sum;
}

Не стоит печатать значение sum в sumVector() как (IMO), это более понятно:

cout << "whats the sum: " << sumVector(ages);

Может также потребоваться сохранить результат sumVector() в переменной и ничего не записывать в стандартный вывод в точке, где вычисляется сумма.

2 голосов
/ 16 февраля 2012

";" после неправильного for - как вы пишете, точка с запятой будет телом цикла for.

Я не трогал ваше имя (например, целые числа2 немного раздражает).

template<typename T>
int sumVector(const vector<T> &integers2)
{
     int sum=0;
     typename vector<T>::const_iterator constIterator;
     //display vector elements using constIterator
     for (constIterator=integers2.begin();constIterator!=integers2.end();++constIterator) {

         sum+=*constIterator;
     }
     cout<<sum;
     return sum;
}

Я тоже переупорядочил

  • print и return суммы, потому что возвращаемый конец - выполнение функции.
  • Инициализация i = 0 также должна быть выполнена до цикла.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...