获取向量中字符的位置(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++)的主要内容,如果未能解决你的问题,请参考以下文章

在向量中查找字符串的索引

c++ 中将标准输入内容读入字符串或向量的最快方法

将字符串列表插入二维向量

在 C++ 中获取指向复数向量的实部和虚部的指针

C++ - 从向量中获取派生类变量

我可以直接从 C++ 中向量元素的指针获取索引吗?