2017-10-01 6 views
-2

私は、Prime Numbersをリストしようとしています。単にリストするのではなく、Vector(ダイナミックサイジング)に列挙させようとしています。int型の関数からのベクトルを返す

なぜ私はそれらをリストアップできないのか理解できません。

#include "TestFile.h" 
#include <iostream> 
#include <cmath> 
#include <vector> 

using namespace std; 

vector<int> primeCalc(int z) 
{ 
    vector<int> myVector; 

    for (int i = 3; i <= 100; i += 2) 
    { 
     float val = i; // Produce float value 
     int mid = static_cast<int>(sqrt(val)); 
     int j; 
     for (j = 3; j <= mid; j += 2) 
      if (i % j == 0) 
       break; 

     if (j > mid) 
      myVector.push_back(i); 
    } 
    cout << sizeof(myVector) << endl; 
    return myVector; 
} 

int main() 
{ 
    int x = 100; 
    vector<int> myAnswer; 

    myVector = primeCalc(x); 
    for (std::vector<char>::const_iterator i = myAnswer.begin(); i != myAnswer.end(); i++) 
    { 
     std::cout << *i << ' '; 
    } 

    return 0; 
} 

編集:提案に基づいて編集を行いました。このエラーが発生しました:'__wrap_iter<pointer>'から'__wrap_iter<const_pointer>'への実行可能な変換はありません。私はあまりにもsizeof()が私が48の数を数えたときに値24を返した理由を理解していない。

答えて

1

std::vectorの内容を手動で印刷する必要があります。あなたはmain()またはprimeCalc()でこれを行うことができます。

for (std::vector<int>::const_iterator i = myVector.begin(); i != myVector.end(); i++) { 
    std::cout << *i << ' '; 
} 

あなたはprimeCalc()はベクトルを返すようにしたい場合は、intからstd::vector<int>にその戻り値の型を変更する必要があります。

+0

戻り値の型をintからstd :: vector に変更すると、関数をベクトル型としても初期化する必要があることを意味しますか? –

+0

C++で関数を実際に初期化するわけではありませんが、 'primeCalc()'にintを渡すことについて話していますか?もしそうなら、あなたはその議論をそのまま維持することができます。 'std :: vector '変数を 'primeCalc()'で初期化し、それに素数を加えて、その変数を返す必要があります。 – frslm

+0

@RyanLee私は ' 'の代わりに' 'を使うように私の答えを編集しました。これにより少なくとも1つの問題が修正されるはずです。 'sizeof(myVector)'に関しては、代わりに 'myVector.size()'を使って 'myVector'の要素数を取得する必要があります。 – frslm

関連する問題