を宣言するのにベクトルの要素の構造体はC、要素の数をiとすると(a入力int型)

StackOverflow https://stackoverflow.com/questions/574060

  •  05-09-2019
  •  | 
  •  

質問

詳しくは、こちらでご確認下さいコードは、ご容赦な知識です。として出力エラーがなかった。私は申告する必要はありベクトルの要素の構造体がさんありがとうございます。要素数れた入力int型).

またその他の手法では全てを受け取ったときにエラー変換できないCるintです。する方法を教えてください。

# include < iostream >
using std::cout;
using std::cin;
using std::endl;

# include < vector >
using std::vector;

struct C{
    int cor;
    vector<int>cores;

    };

    void LerVector( vector< C> &array ) ;

int main ()
{
     int n;
    bool done=false;
        bool don=false;
    vector<C>cidade;
    int i;


    while(!done){
    cout<<"Entre o número de cidades "<<endl;
    cin>>n;
    if(n>500)
    {
        cout<<endl;
        cout<<"O número máximo é 500"<<endl;
}
else
done=true;
}
n--;
while(!don){
cout<<"Entre o número de confederações"<<endl;
cin>>i;
if(i>100){
cout<<endl;
cout<<"Número máximo de 100 cidades"<<endl;

}
else {

 LerVector(  cidade) ;

don=true;
}
}


    cin.get();
    return 0;
}
//resolve...
 void LerVector( vector< C> &array ) 
  { 
    for ( size_t i = 0; i < array.size(); i++ ) 
      cin>>array[i];

  } // end function inputVector 
役に立ちましたか?

解決

のは、説明してみましょう:)

cin >> array[i];

それが実際にその作業を行うオペレータを>>必要ので、構造体C.まあのオブジェクトにcinから抽出しようとします

istream & operator>>(istream &is, C &c) {
    is >> c.cor; // or into whatever member 
    return is;
}

また、言及した別の一人として、あなたは実際には最初のベクトルに要素を追加する必要があります:

while(!don){
    cout<<"Entre o número de confederações"<<endl;
    ....
} else {
    cidade.resize(i); // resize to i elements
    LerVector(cidade);
    don = true;
}

次の時間のために、テキスト(正しいインデントそれ)をフォーマットしてください。私はそれをステップ実行することは困難でした:)

他のヒント

どのエラーコードが生成しましたか?

私はまた、あなたのコードが行うことになっているかわからないんだけど。 )(メインでは、あなたがC.しかし、Cのベクトルを作成しても、int型のベクトルが含まれています。意図していることですか?

私はあなたが何をしようとして、実際に明確ではないよ。

しかし、私はすでに我々のコード内の1つの潜在的なエラーを見ることができます

LerVectorでは、あなたは現在、その中のすべてのアイテムを持っているので、0の大きさを持っていないベクターを参照して入って来ます。

何をしようとしているのは、限り、私はサイズよりも小さくなるように、あなたは配列内のその項目を更新することです。あなたが出て起動したときしかし、サイズが0であるので、私はあなたにも入力ループに行くつもりはないと思う。

ベクトルは任意のサイズで初期化されていないので、今、あなたがやっていても、あなたはあなたが範囲外になるだろうエラーが発生することがあります。あなたはrrayのサイズを変更する必要があります。

私はあなたが何をしたいのか推測するならば、それはこのようにする必要があります:

// First create an empty vector of C's
vector<C> cidade;

// cidade has zero elements now
// Read i from user
cin >> i;

// Resize vector to contain i elements
cidade.resize(i);

// Then go on and fill them.
int n;
for (n = 0; n < i; i++) {
  cin >> cores;
  cidade[n].cores.resize(cores);
  // now cidade[n].cores has 'cores' elements, but they are uninitialized
}

一つの std::vector<T> コンストラクタまでの初期サイズが宣言された後、その数は知することで渡すことができるコンストラクタです。

cin >> n;
std::vector<C> cidade(n);

または利用できるサイズの変更方法を変えベクターますので予めご了承ください。

または利用できるの追加方法のベクトル(無を明示的に与え、サイズ)。

ただ全体としてはもしやすいと、フルバージョンのコードの詳細のコードがあしらわれている。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top