需要注意的地方是,这里扩展成完整的可观测的代码的时候,需要把传给 t1 的 some_vec 显式地转为一个 ref,

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

void f(std::vector<double>& v) {
    // 对v做一些操作
}

struct F {
    std::vector<double>& v;

    F(std::vector<double>& vv) : v(vv) {}

    void operator()() {
        // 对v做一些操作
    }
};

int main() {
    std::vector<double> some_vec{1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::vector<double> vec2{10, 11, 12, 13, 14};

    std::thread t1{f, std::ref(some_vec)};  // 在单独线程中调用f(some_vec)

    std::thread t2{F{vec2}};  // 在单独线程中调用func对象

    t1.join();
    t2.join();

    return 0;
}