2017-02-09 8 views
1

私はベクトルを使って構造体に対してn個のオブジェクトを作成するプログラムを用意しています。私はこのベクトルを関数get_stud_dataに渡して、そこでstudentの名前を入力したいと思います。すべてのベクターオブジェクトをメイン関数に戻したい場合はベクトルオブジェクトを関数に渡して返す

#include <iostream> 
#include <string> 
#include <vector> 
#include "stdio.h" 

using namespace std; 

struct students 
{ 
string name; // I am not sure 
int roll_no; 
}; 

vector<p>& get_stud_data(vector<students> & p, int n) 
{ 
for(int i=0;i<n;i++) 
{ 
cout<<"Enter Name of " <<i+1<<"th student\n"; 
cin>> p[i].name; 
} 
return p; 
} 

int main() 
{ 

int n; 
cout<<" Enter the number of students: "; 
cin>> n; 

vector<students> p(n); // creating n objects for struct students 

    // Want to retrieve the objects here. 
    p=get_stud_data() 
    return 0; 

    } 
+0

。ベクトルを返す必要はありません。ちょうど参照として渡される更新されたベクトルを使用してください。 –

答えて

0

あなたはそうする必要はありません。

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

struct student 
{ 
    string name; 
    int roll_no; 
}; 

void get_student_data(vector<student>& students) 
{ 
    for(int i = 0; i < students.size() ; i++) 
    { 
    cout << "Enter Name of " << i+1 << "th student\n"; 
    cin >> students[i].name; 
    } 
} 

int main() 
{ 
    int n; 

    cout << " Enter the number of students: "; 
    cin >> n; 

    vector<student> students(n); 

    get_student_data(students); 

    // cout some students here to see it worked 

    return 0; 
} 

あなたが本当にベクトルを返すようにしたい場合は、あなたがすることができます:あなたは、あなたの関数がそれを変更することができます参照としてあなたのベクトルに渡します。そして、あなたが持っているので、それは、この演習ではただ無意味だ2:

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

struct student 
{ 
    string name; 
    int roll_no; 
}; 

vector<student> get_student_data(vector<student>& students) 
{ 
    for(int i = 0; i < students.size() ; i++) 
    { 
    cout << "Enter Name of " << i+1 << "th student\n"; 
    cin >> students[i].name; 
    } 
    return students; 
} 

int main() 
{ 
    int n; 

    cout << " Enter the number of students: "; 
    cin >> n; 

    vector<student> students(n); 

    vector<student> copy = get_student_data(students); 

    // now you have the same data copied into "copy" and "students" 
    // cout some students here to see it worked 

    return 0; 
} 
+0

私はさらに処理をする必要があるので、ベクトルをメイン関数に戻したいと思います。オブジェクトpのベクトルを戻してメイン関数にキャッチする方法 – Step

+0

@Step返す必要はありません。あなたはまだ*持っています。それはなくなっていない。 'students'という名前のインスタンスはまだ存在し、あなたの関数によって変更されました。 – nvoigt

+0

ok colですが、返すことは可能です。私はベクトルオブジェクトがどのように返されるかを知りたい。 – Step

0

あなたが本当にやりたいことは、n個の学生のベクトルを読んで、呼び出し元に戻す場合は、やるだけのことができます:

vector<student> get_student_data(int n) 
{ 
    vector<student> v(n); 
    for (int i = 0; i < n; i++) 
    { 
    cout << "Enter Name of " << (i+1) <<"th student\n"; 
    cin >> v[i].name; 
    } 
    return v; 
} 

また、あなたのコードでは、与えられたサイズnのベクトルを作成し、その内容を読むための関数に渡すことに気付きました。したがって、特定のサイズのベクトルを実際に作成し、そのベクトルの生徒データを読み込ませる場合は、入力/出力パラメータとしてvector<student>を渡すだけです(参照:vector<student>&を使用)。ベクトルは、自分のサイズを知っているように、追加のint nパラメータは、(例えば、あなたはvector::sizeでそれを照会することができます):あなたがベクトルを更新されますので、あなたが参照としてベクトルを渡している

void get_student_data(vector<student>& v) 
{ 
    for (size_t i = 0; i < v.size(); i++) 
    { 
    cout << "Enter Name of " << (i+1) <<"th student\n"; 
    cin >> v[i].name; 
    } 
} 
関連する問題