C++更改一个向量内的结构值,即在一个结构内,即在另一个向量中
C++ Change value of structs inside a vector, that is inside a struct, that is inside another vector
我有以下代码(在此处的链接中找到):
// Example program
#include <iostream>
#include <vector>
#include <chrono>
#include <string>
#include <sstream>
struct ControlStruct {
std::string port;
bool timeoutOn;
int detectionTimeout;
bool state;
};
struct DeviceStruct {
std::string name;
std::vector<ControlStruct> deviceControls;
};
std::vector<DeviceStruct> devices;
int main()
{
for (int i = 0; i < 10; i++)
{
ControlStruct cs;
DeviceStruct device;
std::stringstream ss;
ss << "Device" << i;
device.name = ss.str();
for(int k = 0; k < 5; k++)
{
ControlStruct cs;
ss.clear();
ss << "Port" << i;
cs.port = ss.str();
cs.state = false;
cs.timeoutOn = false;
cs.detectionTimeout = (k * 2) + 1;
device.deviceControls.push_back(cs);
}
devices.push_back(device);
}
//
// Start devices
//
for (auto device : devices)
{
for (auto control : device.deviceControls)
{
control.timeoutOn = true;
control.state = true;
std::cout << "Starting device " << device.name << " with timeout of " << control.detectionTimeout << " sec." << std::endl;
}
}
while (1)
{
for (auto device : devices)
{
for (auto control : device.deviceControls)
{
if (!control.state)
continue;
std::cout << "I NEVER GET HERE!!!!!!!!!!!!" << std::endl;
control.detectionTimeout--;
if (control.detectionTimeout == 0)
{
control.state = false;
std::cout << "Device " << device.name << " timed-out." << std::endl;
}
else
std::cout << "Device " << device.name << " count = " << control.detectionTimeout << std::endl;
}
}
}
}
出于某种原因,我从未进入I NEVER GET HERE!!!
代码。。。
有没有一种特殊的方法来设置向量中的结构值?我是不是遗漏了什么?
我使用的是C++11,gcc-linux。
谢谢你的帮助。
当你有这样的东西时:
std::vector<DeviceStruct> devices;
for (auto device : devices) { ... }
这将遍历设备向量中的所有DeviceStruct值。然而,"自动设备"的意思是"给我一份物品的副本"。
一旦你这样做了,你所做的任何修改都会对副本进行修改——然后当你到达循环体的末尾时,副本就会被丢弃。
在你的情况下,你想说:
for (auto& device : devices) { ... }
"&"这里的意思是"给我一个设备的参考"。现在,"设备"指的是向量中的实际元素(而不是它的副本),因此对它所做的任何更改都是对原始设备所做的。
相关文章:
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 静态结构和一个定义规则
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- 在学习数据结构之前对STL有一个了解是好的吗?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 使用完数据结构后清空数据结构是一个好习惯吗?
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何将数据从一个结构链接到另一个结构
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- error dllimport 函数的定义不允许在一个特定的联合中,而其他类、结构和联合将按预期导出
- std::transform 将一个结构数组复制到另一个结构数组
- C++:如何做一个链表,结构作为参数传递?
- 输入 ctrl + x 后如何再次 cin (cin<<x) 循环(cin 一个结构)
- 两个附带的类层次结构-一个好的设计模式