与运营商[]不匹配

时间:2016-02-29 21:58:19

标签: c++

为什么这段代码会给我一个错误?

#include<iostream>
#include<string>
#include<vector>
using namespace std;
string k;
vector<string> f;
int main()

{
    string k;
    while (cin >> k) {
        char l = '3';
        cin >> k;
        for (auto &v : k) {
            if (v == 'e')
                v = l;
            if (v == 'i')
                v = '1';
            if ( v == 'z')
                v = '2';
        }

        f.push_back(k);
    }
    auto r = f.begin();
    auto s = f.end();
    while (r != s) { 
        string j = f[r];
        cout << j;
        ++r;
    }
    return 0;
}

我尝试编译它并多次编辑,但我总是得到这个错误。 所以我尝试使用不同类型的迭代器,但这不能做到更好。 有没有人有解决这个问题的建议? 它将是一个leet文本生成器

2 个答案:

答案 0 :(得分:2)

您尝试使用迭代器并使用下标运算符,以两种不同的方式混合访问std::vector中的元素。

如果你想使用下标运算符,你必须用向量中的有效索引来调用它,例如:

std::string s = v[1]; // get the second element of the vector

如果你想使用迭代器,你可以这样做:

auto it = v.begin();
std::string s = *it; // get the element referred by the iterator it

答案 1 :(得分:1)

由于r是一个迭代器,你可以像指针一样使用它,而不是像数组索引一样。因此f[r]应为*r

string j = *r;