我在LCS的C ++代码中遇到了这个for(string str: tmp) s.insert(str)
,我不知道它意味着什么。我看到它在Java中使用过。它可以用C ++中的任何其他方式编写吗?
答案 0 :(得分:2)
for(string str: tmp) s.insert(str)
可以改写为
for (auto it = std::begin(tmp); it != std::end(tmp); ++it) s,insert(*it);
以及其他几种使用各种不同类型循环的方法。如果tmp
的类型已知,则可以进一步简化。
答案 1 :(得分:1)
这被称为for-each。它将迭代数据结构的不同元素(例如,列表,向量,集合......),允许您对每个元素执行某些操作。如果你想在c ++中使用它,你将不得不使用c ++ 11,但你可以使用基于迭代器的for
循环达到类似的行为。
使用for (string str : tmp) s.insert(str)
,这里是表达式各部分的小描述。 tmp
是您要迭代的数据结构。 string str
是将为数据结构中的每个元素调用的声明。声明的类型应反映数据结构中的内容。通过此str
变量,您可以访问循环" body"中的数据结构项。表达式s.insert(str)
的最后一部分是循环"" body"与任何常规for
循环一样,但编码器选择将其放在与for
相同的行上。
简而言之,该循环使用tmp
方法将s
中包含的所有字符串插入对象insert
中,可能是另一种数据结构。
答案 2 :(得分:0)
最新的C ++版本有一个类似的for-each
循环。您需要使用最新版本的C ++编译程序才能使其正常运行。
答案 3 :(得分:0)
这是C ++中的一个小工作示例
Connection con = C_DB.getInstance().getConnection();
此处,#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> tmp = { "s1", "s2", "s3", "s4"};
std::vector<std::string> s;
for (const std::string& str : tmp)
s.insert(s.end(),str);
return 0;
}
和tmp
是字符串
因此,我们将向量s
的内容复制到tmp
向量
for循环: s
将获取for (const std::string& str : tmp)
向量中的每个值,并将其插入(追加)到tmp
向量的末尾。
此for循环称为range based loop (自C ++ 11起)