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]
答案 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