std ::向量上的字符串错误 ::迭代器
问题描述:
有人能告诉我为什么我得到:“非法使用这种类型的表达式:std :: string”与for循环?据我所知,一切都应该正确设置。我试图遍历矢量中的字符串并检查每个字符串成员的大小写(尽管我真的只对第一个字符串感兴趣,因此排序算法不会将大写单词与小写字母分开......)std ::向量上的字符串错误<string> ::迭代器
/* BiasedSort: accepts vector<string> by REFERENCE and sorts the vector lexographically, except that if the vector
* contains "Me First", that string is always at the front.
*/
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
// getting error on the "for" line.
void ConvertToLower (vector<string> &vector)
{
for (vector<string>::iterator iter = vector.begin();
iter != vector.end(); ++iter) {
string iterString = *iter;
transform(iterString.begin(), iterString.end(), iterString.begin(), ::tolower);
}
}
void BiasedSort (vector<string> &vector)
{
ConvertToLower(vector);
sort(vector.begin(), vector.end());
}
int main()
{
vector<string> myVector;
myVector.push_back("this");
myVector.push_back("string");
myVector.push_back("and");
myVector.push_back("vector");
myVector.push_back("are for");
myVector.push_back("testing");
myVector.push_back("purposes");
copy(myVector.begin(), myVector.end(), ostream_iterator<string>(cout, " "));
cout << endl;
BiasedSort(myVector);
copy(myVector.begin(), myVector.end(), ostream_iterator<string>(cout, " "));
cout << endl;
system("pause");
return 0;
}
答
我认为,这里的问题是,你命名的参数vector
:
void ConvertToLower (vector<string> &vector)
{
for (vector<string>::iterator iter = vector.begin(); /* ... */
因此,编译器处理行
vector<string>::iterator
如
((vector < string) > (::iterator))
即,比较vector
到string
的表达式,并且该结果以::iterator
。
要解决此问题,请尝试将该参数重命名为该函数,以便您不命名参数vector
。或者,您可以完全限定类型std::vector
以明确指出您正在创建std::vector<string>::iterator
,而不是执行涉及参数vector
的某个表达式。
希望这会有所帮助!
答
编辑:您不应该使用名称vector
作为此函数中的标识符。
+0
@templatetypedef:这就是我的意思。有点。不应该。在这个特定的功能。 – kkm 2012-01-29 07:51:27
出于好奇,你是否正在使用CS106L课程阅读器进行练习?如果是这样,你发现它们有多有用? – templatetypedef 2012-01-29 07:34:49
'滥用命名空间标准;'只是说不。 – 2012-01-29 07:35:05
1.是的,我正在练习CS106L以外的练习。实验室很棒。比类更具体的C++。强烈推荐。 2.我知道我知道,命名空间std滥用...给我打电话newb ...有趣。 – MCP 2012-01-29 07:38:59