2017-05-02 4 views
1
#include <iostream> 
#include <vector> 

int main() 
{ 
    unsigned int numVec; 
    unsigned int input; 

    std::cout << "Enter Number of Vectors: "; 
    std::cin >> numVec; 

    std::vector<int>* Vec; 
    for (unsigned int i = 0; i < numVec; i++) 
    { 
      std::cout << "Enter Vector Value " << i << ": "; 
      std::cin >> input; 
      Vec->push_back(input); 
    } 
    std::cout << std::endl; 
    for (unsigned int i = 0; i < Vec->size(); i++) 
    { 
      std::cout << "Value at Index (" << i << ") " << Vec->at(i) << std::endl; 
    } 
    std::cout << std::endl; 
    return 0; 
} 

私は明らかに理由がないのに非常に長い時間学習を控えていたトピックであるため、ベクターがどのように動作するのか学習しようとしています。C++ポインタを使用するときにベクトルを表示する

私の上記のコードはコンパイルされ実行されますが、一度コードに格納する番号を入れたら、がクラッシュします。

私はポインターなしのベクトルを使用していたときにプログラムがうまくいったのですが、学習の理由から私はポインターで試してみたかったのですが、私はこのコードで何が間違っているのか、このような状況で私が間違っていることについて何か良いアドバイスをしてくれるので、私は将来の参考のために学ぶことができます。

+0

'std :: vector * Vec;'ここには何かがありません。 – InternetAussie

+1

@InternetAussie:コメントは回答ではありません。 –

答えて

3

std::vector<int> vec;

std::vector<int>* Vec;

を交換し、メンバー選択演算子.付き部材オペレータ->へのポインタを置き換えます。

std::vectorインスタンスの動的記憶域を使用する必要があるのはまれであり、そのクラスはメモリの管理に優れています。現在、ベクトルにメモリを割り当てていないので、コードの動作はで、定義されていないのはです。あなたはポインタを使用する必要がある場合

その後、

std::vector<int>* vec = new std::vector();

を書いて、あなたが完了したら、delete vec;を呼び出すことを忘れないでください。 std::unique_ptr & cを使用することを検討してください。 deleteは自動的に処理されます。

+0

私はopがまったく反対で、ベクトルへのポインタを使用したいと思っています.... –

+0

まあ、そうすべきではありません。少なくとも最初はそうではない。それが「良いアドバイス」です。しかし、それにもかかわらず、 'new'構文を追加しました。 – Bathsheba

0

上記のコードはコンパイルされ実行されますが、一度コードに格納する数値を入れたらクラッシュします。

どのようなベクターですか?

ベクターを作成したことはありません。

あなたはポインタを作成しましたが、(a)は初期化されておらず、(b)は何も指していません。

関連する問題