包含作为 const char * 给出的字符序列,c++,string,pointers,char,stdvector"/>

首页 > 解决方案 > 检查 std::vector 是否包含作为 const char * 给出的字符序列

问题描述

当我声明时std::vector<std::string> v,我可以轻松检查它是否包含给定的字符序列

if ( std::find( v.begin(), v.end(), "abc" ) != v.end() )
{
    // some logic if contains
}

但是如果我使用std::vector<const char*> v并尝试应用相同的逻辑来查找给定的字符序列,我的代码将无法正常工作。

是什么导致了这个问题?我该如何解决这个问题?

编辑

最快的解决方案(我关心性能,这就是我拒绝的原因std::string

bool FindStringInArray( const DynamicArray<const char*>& array, const char* pStr )
{
    return ( std::find_if( array.cbegin(), array.cend(), [&]( const char* p ) 
            { return strcmp( p, pStr ) == 0; } ) != array.cend() ) ? true : false;
}

标签: c++stringpointerscharstdvector

解决方案


除此之外,引入了 c++17 std::string_view,它是一个精简的包装器,const char*并正确地重载了​​运算符。意味着成为“现代C++”的替代品const char*

std::vector<std::string_view> v;
if ( std::find( v.begin(), v.end(), "abc" ) != v.end() )
{
    // some logic if contains
}


推荐阅读