1

for ループはベクトルを反復処理し、すべての文字列をコンソールに正常に表示します。

int main(int argc, const char * argv[])
{
    vector<string>stringVector;
    string newStringEntry;

    cin>>newStringEntry;
    stringVector.push_back(newStringEntry);

    cin>>newStringEntry;
    stringVector.push_back(newStringEntry);

    for (vector<string>::iterator i = stringVector.begin(); i != stringVector.end(); ++i) 
    {
        cout<<*i<<endl;
    }
}

しかし、これはコードを読みにくくします (私たちの先生は言いました) for ループ用のクラスを構築する必要があり、メインは変更後に次のようになります。

int main(int argc, const char * argv[])
{
    vector<string>stringVector;
    string newStringEntry;

    cin>>newStringEntry;
    stringVector.push_back(newStringEntry);

    cin>>newStringEntry;
    stringVector.push_back(newStringEntry);

    showStrings();
}

私が見る問題は、メインで宣言するベクトル名がクラスで認識されていないため、for ループを独自のクラスにコピーして貼り付けることができないため、エラーが発生することです。

どうすればこれを機能させることができますか?

これまでの私のクラスは次のようになります。

class VectorHelp {
    void showStrings() const 
    {
        for (vector<string>::iterator i = vectorName.begin();
                i != vectorName.end();
                ++i)
        {
            cout << *i << endl;
        }
    }
};
4

3 に答える 3

3

ベクターをクラスに格納するか、関数に渡す必要があります。

于 2012-07-04T09:54:10.493 に答える
1

メソッドパラメータvector<strings>としてあなたを渡す必要があります:

VectorHelp::showStrings(stringVector);

...

static void showStrings(const vector<string>& stringVector)

仮パラメータと実パラメータの名前は同じである必要はありません。また、インスタンス メンバー関数ではなく、showStringsクラス メンバー関数 (つまり ) である必要があることに注意してください。static

最後に、標準 C++ ライブラリの機能を使用して、ループなしで印刷できることに注意してください。

ostream_iterator<string> out_it (cout, "\n");
copy (stringVector.begin(), stringVector.end(), out_it);
于 2012-07-04T09:54:24.417 に答える
1

次のような意味だと思います。

class VectorHelp
{
    private:
         std::vector<std::string> stringVector

    public:

    void add(const string& str)
    {
        stringVector.push_back(str);
    }

    void printStrings()
    {
        for (vector<string>::iterator i = stringVector.begin(); i != stringVector.end(); i++)
        {
            cout << *i << endl;
        }
    }

}

あなたが提供した for ループが正しいものであるかどうかはわかりませんが、私は実際にはイテレータを使用せず、インデックスを使用するだけです。

しかし、上記のクラスは、インスタンス化して文字列を追加して後で出力できるクラスです!

于 2012-07-04T10:04:46.257 に答える