抱歉,我之前的回答有误。std::atomic
不支持复制构造函数,因此不能直接将其放入 std::vector
中。相反,你可以使用 std::vector<std::atomic<float>*>
类型的指针向量来达到类似的效果。
以下是一个修正后的示例代码:
#include <iostream>
#include <vector>
#include <atomic>
int main() {
std::vector<std::atomic<float>*> data;
// 初始化原子变量,并将指针添加到向量中
auto atomic1 = new std::atomic<float>(1.0f);
data.push_back(atomic1);
auto atomic2 = new std::atomic<float>(2.0f);
data.push_back(atomic2);
auto atomic3 = new std::atomic<float>(3.0f);
data.push_back(atomic3);
// 在不同线程中对原子变量进行操作
std::thread t1([&]() {
(*data[0]) += 10.0f;
});
std::thread t2([&]() {
(*data[1]) *= 2.0f;
});
t1.join();
t2.join();
// 打印原子变量的值
for (const auto& ptr : data) {
std::cout << *ptr << " ";
delete ptr; // 删除动态分配的原子变量对象
}
return 0;
}
在上述代码中,我们使用了 std::vector<std::atomic<float>*>
来存储指向 std::atomic<float>
对象的指针。然后,我们在每个指针上执行相应的操作。
最后,我们遍历指针向量并打印原子变量的值。请注意,在使用完毕后需要手动删除动态分配的原子变量对象。
非常抱歉给你带来困惑,并感谢你的纠正。
内容由零声教学AI助手提供,问题来源于学员提问