如何迭代vector中包含的字符串
How do I iterate through a string contained in a vector?
为了清楚起见,我不是在问如何迭代字符串向量(这是我所有的搜索结果),我想迭代字符串向量中包含的字符串。当我试图给字符串迭代器分配一个向量中的字符串值时,我遇到了链接器错误。
下面的代码接受对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;
};
stringsVectorIterator
是const
迭代器,所以它的目标字符串是const
。这意味着您不能在字符串上获得非const
迭代器。
改变内循环:
for (string::const_reverse_iterator rit = ...
^^^^^^
一切都会好起来的。
在c++ 11或更高版本中,可以使用auto
来避免这些麻烦。
相关文章:
- 编译包含字符串的代码时遇到问题
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 为什么我的结构在包含字符串时崩溃?
- C++应在标头和源中包含字符串
- 为什么 cin 在包含字符串标头后接受字符串输入
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法
- 包含字符串的结构的 Boost 进程间向量是否需要特殊的分配器?
- 字符串和输入文件,从包含字符串的 txt 文件中分配多个变量值
- 包含字符串的类:当它从函数返回时会发生什么?
- 从c#lib返回一个包含字符串到c 程序的结构
- c++ 序列化包含字符串和指向另一个对象的指针的对象
- 复制CORBA ::任何包含字符串的corba程序SEG故障
- 为什么即使在启用 C++11 并且我包含字符串之后,'stod'仍然没有在此范围内声明?
- 我正在尝试读取一个包含字符串和整数的二进制文件..并打印出与字符串对应的整数
- 将数组设置为包含字符串值会导致错误
- 如何通过Visual Studio中的预处理器传递包含字符串和引号的环境变量
- 当我在 c++ 中不包含字符串头文件时出错
- 即使包含字符串C++程序的编译错误
- 包含字符串数组的结构的malloc问题