#include <iostream>
#include <vector>
#include <string>
void function1(const char** keywords) { // C like
for (const char** keyword = keywords; *keyword; ++keyword) {
std::cout << *keyword << std::endl;
}
}
void function2(const std::vector<std::string>& keywords) { // C++11 like
for(const std::string& keyword : keywords) {
std::cout << keyword << std::endl;
}
}
int main() {
static const char* keywords[] = { "hello", "world", "!", 0 };
function1(keywords);
function2({ "hello", "world", "!" });
return 0;
}
两个函数的结果相同。我喜欢新的c ++ 11初始化格式,其中值是内联的,我可以跳过空值(零)。问题是性能。我希望function2将在每次调用时动态分配内存。我想这不会有效。有没有更好的方法可以使用C ++方式来实现这种功能,同时保持旧的C效率?
如果string
数组大小是固定的,则可以使用std::array
,就性能而言,它与C数组基本相同,它很像C中的固定大小的char数组。
这里的问题是C和C ++编译器现在正在优化