使用" for(string str:tmp)"在c ++中?

时间:2017-04-02 03:43:43

标签: java c++ string

我在LCS的C ++代码中遇到了这个for(string str: tmp) s.insert(str),我不知道它意味着什么。我看到它在Java中使用过。它可以用C ++中的任何其他方式编写吗?

4 个答案:

答案 0 :(得分:2)

for(string str: tmp) s.insert(str)

range-based for loop

可以改写为

for (auto it = std::begin(tmp); it != std::end(tmp); ++it) s,insert(*it);

以及其他几种使用各种不同类型循环的方法。如果tmp的类型已知,则可以进一步简化。

Documentation on std::begin

Documentation on std::end

答案 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 ++编译程序才能使其正常运行。

http://en.cppreference.com/w/cpp/language/range-for

答案 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起)