c++ 标签下投票率最高的问题之一是“Splitting a string in C++”。在其中,提问者问道:“在 C++ 中分割字符串最优雅的方法是什么?”。
这个问题的最高投票答案提供了这两个功能:
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
return split(s, delim, elems);
}
这些功能很好用。但我试图理解为什么回答者没有将这两个功能组合成一个功能。当您结合这些功能时,是否有一些我没有看到您错过的性能、可用性或可读性优势?具有组合功能的完整程序如下:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
// splitting them into two seperate functions is unnecessary it seems to me, and makes the underlying function harder to understand.
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
int main()
{
std::vector<std::string> x = split("one:two::three", ':');
for (int i = 0; i<x.size(); ++i) cout << x[i] << '\n';
return 0;
}
我发现这个功能分开后非常不优雅 - 也更难理解 - 但我觉得我一定错过了一些东西。他为什么不把它们结合起来?