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

Passing array as argument to std::thread

本文关键字:std thread 参数传递 数组      更新时间:2023-10-16

我很难使用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::vector或std::list,而不是C样式数组。还有许多其他类型的容器。如果您想要一个固定大小的数组,请使用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();
}

使size常数:

#include <thread>
#include <iostream>
void process(int* start_holder, int size){
  for (int t = 0; t < size; t++){
   std::cout << start_holder[t] << "n";
  }
}
int main (int argc, char *argv[]){
  static const int size = 5;
  int holder_list[size] = { 16, 2, 77, 40, 12071};
  std::thread run_thread(process, holder_list, size); 
  run_thread.join();
}

如果size是可变的,则int arr[size]不是标准C++。正如编译器在错误中所说,它是该语言的变量数组扩展,与int*(也称为int [])不兼容。