c++ - 检查 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++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
}
推荐阅读
- html - 从站点 A 向站点 B 发布表单时,POST 请求是否包含站点 B 的 cookie?
- java - 我无法在java中设置-Xmx
- javascript - JavaScript中从字符串和数字的组合到日期格式的意外转换
- socket.io - 无效会话/会话断开连接
- c# - 路径中的空格问题,启动 python 脚本的参数 C#
- gradle - 无法在 Grails 项目中获取 Artifactory 工件,尽管可以访问它们
- php - 如何将输入值传递给我的条形图
- html - 身体上的背景图像 - 图像已放大
- javascript - 如何从两个自定义元素中捕获自定义事件?
- visual-studio-code - 在 VSCode 中更改德语变音符号的键绑定