搜索向量,然后在向量中显示下一个元素

时间:2017-02-03 03:25:53

标签: c++ pointers vector

void encodeFunc (char ch, vector<string>& keyAlpha); 

int main(){
    ch = msgContent.at(i);
    encodeFunc(ch, keyAlpha);
}

void endcodeFunc (char ch, vector<string>& keyAlpha){
        typedef vector<string> keyCheck;
        typedef keyCheck::const_iterator keyIterator;
        keyIterator q = find(keyAlpha.begin(), keyAlpha.end(), ch);
        int element = distance(keyAlpha.begin(), q);
        cout << keyAlpha.at(element+1);

    }

我有上面的代码位来在向量中找到给定的char,然后在向量中显示下一个元素。但是,在尝试搜索由ch语句填充的ch = msgContent.at(i);时,我收到错误[Error] no matching function for call to 'distance(std::vector<std::basic_string<char> >::iterator, keyIterator&)'

这是一个我没有接受的指针问题,还是还有其他问题?

1 个答案:

答案 0 :(得分:2)

您的typedef&#39; d keyIteratorvector<string>::const_iterator。问题是keyAlpha.begin()会返回vector<string>::iterator,因此您将两种不同的类型传递给std::distance,这会导致模板类型扣除失败。

你可能想要:

int element = distance(keyAlpha.cbegin(), q);

cbegin()会返回const_iterator

作为旁注,更简单的方法是:

void endcodeFunc(const string& ch, const vector<string>& keyAlpha)
{
    auto it = find(keyAlpha.cbegin(), keyAlpha.cend(), ch);
    if (it != keyAlpha.cend() && (it + 1) != keyAlpha.cend())
        cout << *(it + 1);
}