gpt4 book ai didi

c++ - 我可以读取 vector::iterator 的数字位置吗?

转载 作者:太空狗 更新时间:2023-10-29 23:33:29 26 4
gpt4 key购买 nike

我有一个字符串 vector 。我希望能够在该 vector 中搜索字符串,如果我在 vector 中找到匹配项,我希望能够返回位置,例如 vector 中项的 vector 索引。

这是我试图解决问题的代码:

enum ActorType  { at_none, at_plane, at_sphere, at_cylinder, at_cube, at_skybox, at_obj, at_numtypes };

class ActorTypes
{
private:
std::vector<std::string> _sActorTypes;

public:
ActorTypes()
{
// initializer lists don't work in vs2012 :/
using std::string;
_sActorTypes.push_back( string("plane") );
_sActorTypes.push_back( string("sphere") );
_sActorTypes.push_back( string("cylinder") );
_sActorTypes.push_back( string("cube") );
_sActorTypes.push_back( string("skybox") );
_sActorTypes.push_back( string("obj") );
}

const ActorType FindType( const std::string & s )
{
auto itr = std::find( _sActorTypes.cbegin(), _sActorTypes.cend(), s );

uint32_t nIndex = ???;

// I want to be able to do the following
return (ActorType) nIndex;
}
};

我知道我可以只写一个 for 循环并返回我找到匹配项的 for 循环索引,但我想知道更一般的情况 - 我可以获得 vector::iterator 的索引值吗??

最佳答案

使用std::distance:

uint32_t index = std::distance(std::begin(_sActorTypes), itr);

不过,您应该首先检查 findend() 的返回值,以确保确实找到了它。您还可以使用减法,因为 std::vector 使用随机访问迭代器,但减法不适用于所有容器,例如 std::list,它使用双向迭代器。

关于c++ - 我可以读取 vector<string>::iterator 的数字位置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13614683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com