如何遍历向量中包含的字符串?

时间:2015-05-21 17:01:31

标签: c++ string vector iterator

为了清楚起见,我不是要问如何遍历字符串向量(这是我的所有搜索都出现了),我想迭代字符串向量中包含的字符串。尝试从向量中的字符串赋值字符串迭代器时,我遇到了链接器错误。

下面的代码引用了一个const向量的字符串。该函数的目的是颠倒字母和元素的顺序,所以如果你传入一个包含{“abc”,“def”,“ghi”}的字符串向量,它会重新排序它们并返回一个包含字符串的向量{“ihg”,“fed”,“cba”}。应该注意,该函数在头文件中声明为static。当我尝试在for循环中尝试初始化字符串迭代器时,我遇到了问题。我收到链接器错误:

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

我想通过 - &gt;访问rbegin()从矢量迭代器可以工作,但...我很难过。为什么stringsVectorIterator-&gt; 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;
};

1 个答案:

答案 0 :(得分:5)

stringsVectorIteratorconst迭代器,因此其目标字符串为const。这意味着您无法在字符串上获得非const迭代器。

更改内循环:

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

一切都应该好。

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