vector <string> :: iterator </string>上的std :: string错误

时间:2012-01-29 07:30:40

标签: c++ string vector

有人可以告诉我为什么我会得到:“非法使用这种类型的表达式:std :: string”在for循环的行上?据我所知,一切都应该正确设置。我正在尝试遍历向量中的字符串并检查每个字符串成员的大小写(虽然我真的只对第一个感兴趣,因此排序算法不会将大写单词与小写单词分开...)

/* 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;
}

2 个答案:

答案 0 :(得分:3)

我认为这里的问题是您已将参数命名为vector

void ConvertToLower (vector<string> &vector)
{
    for (vector<string>::iterator iter = vector.begin(); /* ... */

因此,编译器正在处理行

vector<string>::iterator

作为

((vector < string) > (::iterator))

即,将vectorstring进行比较,将结果与::iterator进行比较。

要解决此问题,请尝试将参数重命名为函数,以便不命名参数vector。或者,您可以对类型std::vector进行完全限定,以明确表示您正在创建std::vector<string>::iterator,而不是执行涉及参数vector的某种表达。

希望这有帮助!

答案 1 :(得分:0)

已编辑:您不应在此功能中使用名称vector作为标识符。