gpt4 book ai didi

c++ - 将数组作为参数传递给 std::thread

转载 作者:行者123 更新时间:2023-11-30 05:34:35 28 4
gpt4 key购买 nike

我在使用 std::thread 将整数数组传递给函数时遇到困难。线程似乎不喜欢它的数组部分。还有什么其他方法可以将数组传递给线程函数?

#include <thread>
#include <ostream>
using namespace std;

void process(int start_holder[], int size){
for (int t = 0; t < size; t++){
cout << start_holder[t] << "\n";
}
}
int main (int argc, char *argv[]){
int size = 5;
int holder_list[size] = { 16, 2, 77, 40, 12071};
std::thread run_thread(process,holder_list,size);
//std::ref(list) doesnt work either
//nor does converting the list to std::string then passing by std::ref
run_thread.join();
}

最佳答案

由于您使用的是 C++,因此开始使用 std::vectorstd::list而不是 c 风格的数组。还有很多其他container类型也是如此。如果你想要一个固定大小的数组使用 std::array相反(C++11 起)。

这些容器具有获取大小的函数,因此您无需将其作为单独的参数发送。

#include <thread>
#include <iostream>
#include <vector>

void process(std::vector<int> start_holder){
for(int t = 0; t < start_holder.size(); t++){
std::cout << start_holder[t] << "\n";
}
// Or the range based for
for(int t: start_holder) {
std::cout << t << "\n";
}
}

int main (int argc, char *argv[]){
std::vector<int> holder_list{ 16, 2, 77, 40, 12071};
std::thread run_thread(process, holder_list);
run_thread.join();
}

关于c++ - 将数组作为参数传递给 std::thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166296/

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