0

私はこのコードを持っており、ユーザーコードを読み取って配列に格納し、後で各配列の要素の合計を見つけて両方を比較します。コードは次のとおりです。

#include <iostream>
#include <vector>
#include <numeric>

typedef std::vector<int> int_vec_t;

//Call by reference to set variables in function
void readData(int_vec_t& v1, int_vec_t& v2)
{
  v1 = int_vec_t{1,1,8}; //This only works for C++11
  v2 = int_vec_t{2,2,2};
}

void readUserData(int_vec_t& v)
{
  for(;;)
  {
    int val;
    std::cin>>val;
    if(val == 0) break;
    v.push_back(val);
  }
}

int main()
{
    using namespace std;

    int_vec_t A;
    int_vec_t B;

    readData(A,B);
    //Or
    readUserData(A);
    readUserData(B);

    int sumA = accumulate(A.begin(), A.end(), 0); //Then use iterators
    int sumB = accumulate(B.begin(), B.end(), 0);

    cout << ((sumA > sumB) ? "Array A Greater Than Array B\n" : "Array B Greater Than Array A\n");

    return 0;
}

ただし、上記のコードは次のエラーを生成します。

test.cpp: In function ‘void readData(int_vec_t&, int_vec_t&)’:

私はg++ test.cpp -o testコードをコンパイルするために使用しています。ここで何が欠けていますか?

4

2 に答える 2

3

コンパイルは次のようにすべきだと思いませんか:

$ g++ -std=c++11 test.cpp -o test?

入力を受け取り続けます。配列ごとに 5 つの要素のみを受け取るように制限するにはどうすればよいですか

void readUserData(int_vec_t& v)
{
  for(int i = 0; i < 5; i++)
  {
    int val;
    std::cin>>val;
   // if(val == 0) return;
    v.push_back(val);
  }
}

ありがとうございます。ループの間にどのようにステートメントを出力して、ユーザーが配列 1 の配列を入力していて、その配列 2 の後に配列を入力していることを知ることができますか?

void readUserData(int_vec_t& v, std::string default = "")
{
  for(int i = 0; i < 5; i++)
  {
    int val;
    std::cout << "Enter for "<< default << "[" << i << "]: ";
    std::cin>>val;
   // if(val == 0) return;
    v.push_back(val);
  }
}

そして、あなたからmain()別の文字列を送信できます。

たとえば、次のようにします。

readUserData(A, "A");
readUserData(B, "B");
于 2013-03-05T15:23:02.463 に答える
2

これは、 c++が関数をメインエラーに渡すための提案された解決策として投稿された私のコードでした

はい、コードに記載されているようにC++11コンパイラが必要です。それは最終的なコードとしても意図されていませんでした。

OPには、C++に関する優れた本を読むことをお勧めします。「C++プログラミング言語」を提案させてくださいhttp://www.amazon.com/The-Programming-Language-3rd-Edition/dp/0201889544

于 2013-03-05T16:04:14.473 に答える