gpt4 book ai didi

c++ - 返回 std:vector 与 std::async c++11

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:07 25 4
gpt4 key购买 nike

我在使用 std::future 和 std::async 返回 std::vector 时遇到问题。为什么

#include <iostream>
#include <vector>
#include <functional>
#include <future>

using namespace std;

int main(int argc, char** argv) {

int A = 10;
vector<future<int>> sumarray(A);

for(int i = 0; i < A; i++)
sumarray[i] = async( launch::async, [i] { return i; } );

for(int i = 0; i < A; i++)
cout << sumarray[i].get() << " ";
cout << endl;

}

使用 g++ -std=c++11 -pthread 按预期打印工作

0 1 2 3 4 5 6 7 8 9

但是

#include <iostream>
#include <vector>
#include <functional>
#include <future>

using namespace std;

int main(int argc, char** argv) {

int A = 10;
int B = 2;
vector<future<vector<int>>> sumarray(A);

for(int i = 0; i < A; i++){
sumarray[i] = async( launch::async, [i,B] {
vector<int> v(B);
for(int j = 0; j < B; j++) v[j] = (j+1)*i;
return v;
});
}

for(int j = 0; j < B; j++)
for(int i = 0; i < A; i++)
cout << sumarray[i].get()[j] << " ";
cout << endl;

}

以同样的方式编译抛出

terminate called after throwing an instance of 'std::future_error'
what(): No associated state

我使用 std::async 在 lambda 函数中返回 vector 的方式有问题吗?

最佳答案

您在 sumarray 的元素上多次调用 get()。根据the documentation :

valid() is false after a call to this method.

这意味着您不能像内部循环那样多次调用 get()

关于c++ - 返回 std:vector 与 std::async c++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19780890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com