C++代码性能字符串进行比较
C++ code performance strings compare
我有一个结构数组(arrBoards),它有一些整数值,向量和字符串类型。我想比较结构中的某些字符串是否等于输入的参数(字符串 p1)。
什么想法更快 - 用数组中的每个字符串元素检查输入字符串的方程,或者首先检查数组的当前字符串元素中的 string.length() 是否大于 0,然后比较字符串。
if (p1.length())
{
transform(p1.begin(), p1.end(), p1.begin(), ::tolower); //to lowercase
for (int i=0; i<arrSize; i++) //check if string element already exists
if ( rdPtr->arrBoards[i].sName == p1 )
{
*/ some code */
break;
}
}
if (p1.length())
{
transform(p1.begin(), p1.end(), p1.begin(), ::tolower); //to lowercase
for (int i=0; i<arrSize; i++) //check if string element already exists
if ( rdPtr->arrBoards[i].sName.length() ) //check length of the string in the element of the array
if ( rdPtr->arrBoards[i].sName == p1 )
{
*/ some code */
break;
}
}
我认为第二个想法更好,因为它不需要每次都计算名称,但我可能是错的,因为使用 if 可能会减慢代码速度。
感谢您的回答
我确定字符串类的比较运算符(==)已经足够优化了。只需使用它。
运算符==(...) 根据短路比较返回布尔值
return __x.size() == __n && _Traits::compare(__x.data(), __s, __n) == 0;
它在调用 compare() 之前检查字符串的大小,因此无需进一步优化。
永远记住软件工程的原则之一:KISS:P
你想做的是播放百分比。由于字符串很可能不同,因此您希望尽快找到它。
您首先比较长度,但不要假设与您正在执行的其他任何事情相比,计算长度很便宜。
这是我做过的那种事情(在 C 中):
if (a[0]==b[0] && strcmp(a, b)==0)
因此,如果前导字符不同,则永远不会进行字符串比较。如果数据集使得前导字符可能不同,则可以节省大量时间。(strcmp
也有这种优化,但你仍然需要付出设置参数和进出函数的代价。我们在这里谈论的是少量周期。
如果你做这样的事情,那么你可能会发现循环迭代开销花费了很大一部分时间。如果是这样,您可以考虑展开它。(编译器可能会为您展开它,但我不会依赖它。
比较数字比比较字符串更快。在比较字符串本身之前,请尝试比较字符串长度。
相关文章:
- 视觉C++使用 map 来比较字符串中的每个单词
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 比较字符串的 GetLine 工作一次,然后比较之后不起作用
- C++使用关系运算符比较字符串
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- C++ TCP 服务器比较字符串失败
- 如何在不复制的情况下比较字符串的一部分?
- 比较 C++ 字符串打印中的两个整数数组
- 如何比较字符串形式的临时变量
- std::out_of_range 比较字符串中的符号时出错
- 比较字符串大小写不区分的简单方法是什么?
- 比较字符串忽略 NUL
- 比较字符串(arduino)时出现问题
- 如何在C++中比较字符串
- 比较字符串对象等于向量中的元素
- C 比较字符串操作速度
- 需要比较字符串的某些元素
- 比较字符串 .c_str() 和普通字符串的差异
- C 比较字符串的字符
- 通过使用两个不同的队列比较字符串