2016-10-02 29 views
6

执行的搜索算法的并行版本的STL(如性病::查找,的std :: find_if)保证迭代器返回的第一个元素匹配标准的范围内?担保对STL并行搜索算法

该文档没有明确提及是否属于这种情况 - 并且在'C++ Concurrency in Action'中有一个具体实现而不是返回第一个元素。

+1

这他们没有,他们将无法正常工作,非parallell同行,因此是非常不值钱。 –

+2

你的意思是C++标准库吗?如果是这样,那么(目前,C++ 14)在并行和串行算法之间没有形式上的区别。这些算法的行为已经详细说明,而且任何背离都会导致实现不合规。所以这真的取决于你所问的算法。 – juanchopanza

+0

是的,我的意思是标准的。我认为他们会和系列版本一样,但是被这本书弄糊涂了 - 我想这只是一个更简单的例子。非常感谢! – danielgharvey

回答

2

标准库算法的行为*std::find, std::find_if在C++标准中有详细说明。从C++ 14开始,并行算法的指定行为没有例外。这意味着假设的并行实现仍需要遵守这些要求才能符合要求。


*从评论,OP意味着C++标准库,而不是标准模板库。我做了区分,因为STL可能会定义一组不同的规则。

+0

挂上。针对输入迭代器定义了C++标准中的find_if。大概平行版本需要更强大的东西,因此它不完全等效。在这种情况下,对我而言并不重要,但是让我想知道在顺序版本和并行版本之间是什么和不保证是相同的。我想知道是否有任何完整的并行版本规格?我找不到它。 – danielgharvey

+0

@danielgharvey问题是目前的标准没有平行版本。并行实现必须遵守指定的语义。 – juanchopanza