4

因此,虽然查找 std::string 向量内的字符数量很简单,但我想知道是否有一种方法可以使用 STL 为您完成所有工作,而不是使用两个 for 循环,一个循环遍历向量,另一个循环遍历向量每个索引中的字符串。

我尝试过使用其他 STL 函数(例如尝试以几种独特的方式使用 std::for_each),但我所有的尝试都没有成功。

int main(void)
{
  int chars = 0;
  std::vector<std::string> str;
  str.push_back("Vector");
  str.push_back("of");
  str.push_back("four");
  str.push_back("words");

  for(int i = 0; i < str.size(); ++i)
    for(int j = 0; j < str[i].size(); ++j)
      ++chars;

  std::cout << "Number of characters: " << chars; // 17 characters

  // Are there any STL methods that allows me to find 'chars'
  // without needing to write multiple for loops?

}
4

3 回答 3

7

首先,您不需要第二个循环:

for(int i = 0; i < str.size(); ++i) {
    chars += str[i].size();
}

现在对于标准库解决方案:

int chars = accumulate(str.begin(), str.end(), 0, [](int sum, const string& elem) {
    return sum + elem.size();
});

这是关于 ideone 的演示

于 2013-07-24T01:16:21.923 回答
5

对于明确意图的解决方案,您可以使用std::accumulate

using type = std::string::size_type;
type chars = std::accumulate(
    std::begin(str), std::end(str), type(0), [](type total, const std::string &s) {
        return total + s.length();
    }
);
于 2013-07-24T01:15:32.203 回答
1
int chars = accumulate(str.begin(), str.end(), 0, [](int sum, const string& elem) {
return sum + elem.size();
});
于 2013-07-24T02:01:42.587 回答