c++ - 将结构推回结构中的 vector

标签 c++ vector struct push-back

我有以下结构:

enum messageType {New = 0, Old = 1, No_Message = 2};

typedef struct {
    enum messageType type;
    unsigned int senderID;
    char message[100];
} StoredMessageData;

struct StoredMessage {
    unsigned int recipientID;
    vector<StoredMessageData> messages;

    StoredMessage(const unsigned int& intRecipient = 0, const vector<StoredMessageData>& data = vector<StoredMessageData>())
    : recipientID(intRecipient), messages(data)
    {
        messages.reserve(10);
    }

    bool operator<(const StoredMessage& compareTo) const
    {
        return recipientID < compareTo.recipientID;
    }

    bool operator==(const StoredMessage& compareTo) const
    {
        return recipientID == compareTo.recipientID;
    }
};

在我的 main 方法中,有时我收到一条消息并想像这样存储它:

if(msgs.find(rcvdRecipientID) == msgs.end())
{
    StoredMessage storedMsg;
    storedMsg.recipientID = rcvdRecipientID;
    msgs.insert(storedMsg);
}

set<StoredMessage>::iterator it = msgs.find(rcvdRecipientID);
StoredMessage storedMsg = *it;

StoredMessageData data;
data.type = New;
data.senderID = rcvdSenderID;
strcpy(data.message, rcvdMessage);

storedMsg.messages.push_back(data);

如果在 push_back() 之后调用 storedMsg.messages.size(),我得到的值为 1。这对我来说很有意义。

但是,稍后,我想知道我存储了多少条消息,所以,这段代码:

StoredMessage storedMsg;
if(msgs.find(rcvdSenderID) != msgs.end())
{
    storedMsg = *(msgs.find(rcvdSenderID));
    cout << "Number of stored messages to send: " << int(storedMsg.messages.size()) << endl << endl;
    ...

在这里,即使使用与以前相同的 ID,storedMsg.messages.size() 也会返回 0...我很困惑为什么会发生这种情况,并怀疑它与大小不同时被复制的 vector 有关,但我不确定。我不是 C++ 专家,所以请保持温和。 谢谢!

最佳答案

可能是因为这里

StoredMessage storedMsg = *it;

您创建对象的拷贝并对拷贝进行所有修改。

关于c++ - 将结构推回结构中的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663176/

相关文章:

c++ - 为什么十进制浮点运算的提议没有被 C++0x 接受?

c# - 如何检测 C++ 标识符字符串?

arrays - 如何在 Rust 0.7 中迭代字符串数组

c++ - std::vector 或 std::list 用于 std::unordered_map 存储桶?

c++ - 使用从源字符串中提取的子字符串选择性地填充 vector

c - 指向不同结构内的结构的指针。 C

c - 在 C 中使用指向未命名结构的指针?

c++ - 在运行时获取模板类型

c++ - 使用来自另一个 C++ 类的全局变量创建 C++ 源文件的多个实例

c++ - uintmax_t 不处理 128 位