【问题标题】:Range based loop with a pair of strings C++ [closed]带有一对字符串C++的基于范围的循环[关闭]
【发布时间】:2018-10-30 11:42:26
【问题描述】:

我的班级有这个功能

bool MyClass::verifyPair(const std::pair<std::string, std::string>& myPair) const { ... };

我需要 for 循环中的第一个值,我不想将其用于:

for (int index = 0; index < myPair.first.size(); index++) { ... };

我想使用较新的 C++ 循环,我已经尝试过,但无法正常工作:

for (auto& pairIndex : myPair.first) { ... };

【问题讨论】:

  • “不工作”是什么意思?基于字符串的范围返回字符而不是索引。
  • “我需要 for 循环中的第一个值” - 只是第一个?或者所有其他人也是如此?如果它只是第一个,那为什么还要循环呢?

标签: c++ loops for-loop


【解决方案1】:

您的“较新的 C++ 循环”很好,您只是不应该期望得到一个索引,而是一个值:

for (auto& c : myPair.first) {
    //do something with 'c' which is a char at a current position
}

换句话说,c 等价于你的常规 for 循环中 myPair.first[index] 的值。

【讨论】:

    【解决方案2】:

    当你在一个字符串上循环并且它是常量时,你应该在 foo 循环中这样说:

    for (auto ch: myPair.first) { ... }
    

    请注意,我更改了变量名,因为您获取的是字符串中的每个字符而不是索引。

    如果对象比字符大,则可以使用const auto&amp; ch,但对于字符,最好复制它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 2016-10-31
      相关资源
      最近更新 更多