如何在C ++中输出字符串向量?

时间:2013-12-10 01:11:56

标签: c++ string vector

else if (answer == 's') // case 2. Sort
{
    vector<string> theArray[countToken];

    for (int i = 0; i < countToken; i++)
    {
        theArray[i].push_back(token[i]);
    }

    quickSort(*theArray, 0, countToken - 1);

    cout << "=====SORTED=====\n";
    for (int i = 0; i < countToken; i++)
    {
        cout << theArray[i] << "  ";
    }
}

我对如何输出theArray[i]感到困惑。 我定义了theArray vector<string>的{​​{1}}。

完整代码:

theArray[countToken]

2 个答案:

答案 0 :(得分:0)

致电时:

vector<string> theArray[countToken];

创建一个矢量对象数组。 我认为你打算只创建一个矢量对象。 做:

vector<string> theArray;

并使用:

theArray.push_back(val);

打印出来,放

#include <algorithm>

位于文件顶部并执行:

for_each(theArray.begin(), theArray.end(), [] (string& s){ cout << s << " "; });

或者你可以这样做:

vector<string>::iterator it;
for(it = theArray.begin(); it != theArray.end(); ++it) {
    cout << *it << " ";
}

答案 1 :(得分:0)

您为输出矢量而编写的代码没有任何问题。问题是矢量声明本身。您已经将C风格的数组声明符与C ++构造函数语法混合在一起。

结果是您声明了一个countToken字符串向量数组。当您逐步添加数据时,您只需将一个字符串推入每个向量中。当你致电quickSort时,你只是传递了第一个向量。

由于您已经知道要在向量中放置多少项,因此可以创建一个空向量,保留存储以避免不必要的向量调整大小,然后使用push_back

vector<string> theArray;
theArray.reserve(countToken);

for (int i = 0; i < countToken; i++)
{
    theArray.push_back(token[i]);
}

quickSort(theArray, 0, countToken - 1);

但是我注意到你只是直接从token向量中推出项目,并且该向量中包含countToken个项目。那么为什么不像这样复制它:

vector<string> theArray(token);
quickSort(theArray, 0, countToken - 1);

有关可用vector构造函数的详细信息,请参阅此处:std::vector::vector