将迭代器转换为int

Convert iterator to int

本文关键字:int 转换 迭代器      更新时间:2023-10-16
int i;
vector<string> names;
string s = "penny";
names.push_back(s);
i = find(names.begin(), names.end(), s);
cout << i;

我正试图在向量中找到一个元素的索引。iterators可以,但我希望它是int。我该怎么做?

您可以为此使用std::distance

i = std::distance( names.begin(), std::find( names.begin(), names.end(), s ) );

不过,您可能需要检查您的索引是否越界。

if( i == names.size() )
    // index out of bounds!

不过,在使用std::distance之前使用迭代器可能会更清楚。

std::vector<std::string>::iterator it = std::find( names.begin(), names.end(), s );
if( it == names.end() )
     // not found - abort!
// otherwise...
i = std::distance( names.begin(), it );
std::vector<string>::iterator it = std::find(names.begin(), names.end(), s);
if (it != names.end()) {
    std::cout << std::distance(names.begin(), it);
} else {
    // ... not found
}

尝试

i = (find( names.begin(), names.end(), s ) - names.begin());  

编辑:尽管您应该考虑使用vector::size_type而不是int.

我对您的代码所做的假设:

using std::vector;
using std::cout;
using std::string;

如果我的假设是正确的,那么你可以在vectoriterator之间的finddistance(本质上是vector的索引,在这里你可以找到这样的元素(:

using std::distance;

就像这样…

vector<string>::iterator i = find(names.begin(), names.end(), s);
if (i != names.end())
{
    cout << "Index " << std::distance(names.begin(), i);
}
else
{
    cout << s << "not found";
}

您可以取消引用迭代器

int i = *name;