我有一个字符串
use strict;
use warnings;
use Benchmark qw(:all);
my %hash = 1 .. 30_000;
cmpthese(-3, {
values => sub {
for my $v (values %hash) { }
},
keys => sub {
for my $v (keys %hash) { }
},
avalues => sub {
for my $v (@{[ values %hash ]}) { }
},
akeys => sub {
for my $v (@{[ keys %hash ]}) { }
},
});
__DATA__
Rate akeys keys avalues values
akeys 196/s -- -33% -56% -71%
keys 294/s 50% -- -35% -57%
avalues 451/s 130% 54% -- -33%
values 677/s 245% 131% 50% --
永远不会改变。
另外,我有以下功能:
const std::string myString = "my string";
我想通过char查看字符串char并对每个子字符串执行一些操作(我将每个子字符串传递给void myFunction(const std::string str);
)。
这是我先提出的代码:
myFunction
但它给了我错误“无法将const char转换为字符串”。所以我想出了以下代码:
for (std::size_t i = 0; i < myString.length(); ++i) {
myFunction(myString.at(i));
}
哪个有效,但我感觉不太好。
此解决方案是否正确?或者只是巧合才有效(就像未定义的行为,但我很幸运,它在我测试时有效)?
另外,for (std::size_t i = 0; i < myString.length(); ++i) {
char currentChar[2] = {myString.at(i), '\0'};
myFunction(currentChar);
}
中传递的字符串是否应该是const?
答案 0 :(得分:3)
是的,您的解决方案是正确的。它既不高效也不美观,但它有效。
myFunction
需要一个字符串。你不能传递一个角色。字符和单字符串是不同的东西。此外,没有构造函数将字符转换为字符串。
由于myFunction
需要一个字符串,你应该给它一个字符串,或至少const char*
,它可以隐式转换为字符串。
你确定myFunction
确实需要字符串而不是字符吗?
另外,您确定myFunction
不应通过引用接收字符串吗?