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 循环构建一个类,更改后的 main 应该如下所示:

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 循环复制粘贴到自己的类中,因为我在 main 中声明的向量名称在类中是未知的,所以我收到错误。

我怎样才能得到这个工作?

到目前为止,我的课程如下所示:

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 回答