如何迭代vector中包含的字符串

How do I iterate through a string contained in a vector?

本文关键字:包含 字符串 vector 何迭代 迭代      更新时间:2023-10-16

为了清楚起见,我不是在问如何迭代字符串向量(这是我所有的搜索结果),我想迭代字符串向量中包含的字符串。当我试图给字符串迭代器分配一个向量中的字符串值时,我遇到了链接器错误。

下面的代码接受对string类型的const vector的引用。该函数的目的是反转字母和元素的顺序,所以如果你传入一个包含{"abc", "def", "ghi"}的字符串向量,它会重新排序并返回一个包含{"ihg", "fed", "cba"}的字符串向量。应该注意的是,该函数在头文件中被声明为静态。当我试图在for循环中初始化字符串迭代器时,我遇到了一个问题。我得到一个链接错误:

"No matching constructor for initialization of 'std::__1::__wrap_iter<char*>'

我认为通过->从向量迭代器访问rbegin()可以工作,但是…我难住了。为什么stringsVectorIterator->rend()在赋值给string::reverse_iterator rit时会导致链接器错误?

vector<string>  StringUtility::reverse(const vector<string> &strings)
{
    // Create a vector of strings with the same size vector as the one being passed in.
    vector<string> returnValue( strings.size() );
    vector<string>::const_reverse_iterator stringsVectorIterator;
    size_t returnVectorCounter;
    for (stringsVectorIterator = strings.rbegin(), returnVectorCounter = 0;
         stringsVectorIterator != strings.rend();
         stringsVectorIterator++, returnVectorCounter++)
    {
        // the problem is in the initialization of the string iterator, it creates
        // a linker error.
        for (string::reverse_iterator rit = stringsVectorIterator->rbegin();
             rit != stringsVectorIterator->rend();
             ++rit)
        {
            returnValue[returnVectorCounter].push_back(*rit);
        }
    }
    return returnValue;
};

stringsVectorIteratorconst迭代器,所以它的目标字符串是const。这意味着您不能在字符串上获得非const迭代器。

改变内循环:

 for (string::const_reverse_iterator rit = ...
              ^^^^^^

一切都会好起来的。

在c++ 11或更高版本中,可以使用auto来避免这些麻烦。