dan*_*jar 1 c++ performance coding-style
我的问题类似于这个问题,但我不想为此使用库.
想象一下,我们有一个我们想要输出的名称数组.
string names[] = { "Peter", "Max", "Jack", "Daniel", "Luke" };
for(int i = 0; i < sizeof(names); i++)
{
cout << names[i];
}
Run Code Online (Sandbox Code Playgroud)
输出: PeterMaxJackDanielLuke
这不是我们所谓的用户友好,所以让我们在名称之间输出逗号.
for(int i = 0; i < sizeof(names); i++)
{
cout << names[i] << ", ";
}
Run Code Online (Sandbox Code Playgroud)
输出: Peter, Max, Jack, Daniel, Luke,
问题是结尾逗号.随着if我可以检查每一个循环for,如果它是最后一个元素,但这并不似乎是一个干净的解决方案.
在不使用库的情况下在元素之间插入逗号的最佳方法是什么?
首先,代码中存在错误,sizeof(names)会产生错误的值.
为了将逗号放在正确的位置,传统的方法如下:
string names[] = { "Peter", "Max", "Jack", "Daniel", "Luke" };
bool first = true;
for(auto const& name : names) {
if (first)
first = false;
else
cout << ", ";
cout << name;
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您不使用C++ 11:
for (unsigned i = 0; i < sizeof(names) / sizeof(names[0]); ++i) {
if (i > 0)
cout << ", ";
cout << names[i];
}
Run Code Online (Sandbox Code Playgroud)
但是这个:
在不使用库的情况下在元素之间插入逗号的最佳方法是什么?
是错误的态度.只有在使用库时,C++才能正常工作.没有库,C++是一种糟糕的语言.或者,用Stroustrup的话说:
如果没有一个好的库,大多数有趣的任务在C++中很难做到; 但是如果有一个好的图书馆,几乎任何任务都可以轻松完成.
使用boost::join:
std::cout << boost::join(names, ", ") << "\n";
Run Code Online (Sandbox Code Playgroud)
因为重写这个函数是没有意义的……尽管它确实足够简单。