获取向量中字符的位置(C++)
Posted
技术标签:
【中文标题】获取向量中字符的位置(C++)【英文标题】:Getting position of char in vector (C++) 【发布时间】:2016-11-29 15:18:16 【问题描述】:我正在尝试检查字符向量中是否存在字符,如果存在,则获取它的编号。我已经完成了第一部分(检查 char 是否存在):
char letter(a);
string word;
vector<char>vWord(word.begin(), word.end());
if(find(vWord.begin(), vWord.end(), letter) != vWord.end())
但我不知道如何获得这个职位。任何帮助表示赞赏。
【问题讨论】:
你可以简单地使用std::string::find
,它会返回索引
int index = std::find(vWord.begin(), vWord.end(), letter) - vWord.begin();
@KarstenKoop:你应该这样回答。
【参考方案1】:
保存迭代器并对其进行一些数学运算:
vector<char>::iterator itr = find(vWord.begin(), vWord.end(), letter);
if(itr != vWord.end())
int index = itr - vWord.begin();
但是请注意std::string
已经有一个find
方法。
【讨论】:
【参考方案2】:你快到了。您已经有一个指向该字符的迭代器(由find
返回),因此您可以使用std::distance
来查找距离:
char letter(a);
string word;
vector<char>vWord(word.begin(), word.end());
auto it = find(vWord.begin(), vWord.end(), letter);
if (it != vWord.end())
size_t index = std::distance(vWord.begin(), it);
对于随机访问迭代器(例如 std::vector
使用的那些),std::distance(a, b)
是一个常量时间操作,通过执行 b - a
来实现。
旁注:您可以直接对std::string
进行std::find
和迭代器操作;它本身就是一个完美的容器。
【讨论】:
古老的使用-
与std::distance
。
你应该使用auto
,而不是size_t
。在问题提出的场景中,这可能不是问题,但std::distance
的某些用法可以返回负数,而迭代器的difference_type
可能是有符号整数。
@Xirema 在 this 的情况下,std::distance
不可能返回负数,并且在size_t
以外的类型的容器中具有索引可能有其自身的问题在路上。以上是关于获取向量中字符的位置(C++)的主要内容,如果未能解决你的问题,请参考以下文章