gpt4 book ai didi

c++ - 将新字段添加到 C++ vector

转载 作者:行者123 更新时间:2023-11-28 00:10:23 25 4
gpt4 key购买 nike

我正在开发一个应用程序来发送和接收数据包。

我正在使用 std::vector 类(首先我开始在数组中制作数据包,如果您提出更好的建议,我愿意更改方法)。

我找到了 this将任何 const char* 添加到 vector 对象的智能函数。但我想做另一个将它们添加到 {.. , ..} 之间,就像我在 C# 中所做的那样。这里有一个例子:

vector<char*> packet;

char dest[] = { 0x10, 0x10, 0x0, 0x61 };
AppendLiteral(packet, dest); //Ok

/*Or directly:*/ AppendLiteral(packet, { 10, 10, 0, 20 }); //But this does not work

用c++可以吗?我知道在 C# 中你可以做这样的事情。

编辑:

一个可能的解决方案是:

vector<uint8> telegram;

vector<uint8> src = { 0x10, 0x10, 0x0, 0x20 };
vector<uint8> dst = { 0x10, 0x10, 0x0, 0x60 };

telegram.insert(telegram.end(), dst.begin(), dst.end());
telegram.insert(telegram.end(), src.begin(), src.end());

少写一点功能:

template <typename T>
void Append(vector<T> *data, vector<T> *data2)
{
data->insert(data->end(), data2->begin(), data2->end());
}

最佳答案

你的 vector<char*>只包含指向 char 类型变量的指针.它不包含任何数据。这很危险,因为如果指向的对象超出范围,则所述指针可能会悬空。

最好使用数据类型作为 vector 的元素类型.如果要存储字符串,请使用 std::vector<std::string> .如果你想持有像 char[4] 这样的对象, 使用 std::vetor<std::array<char,4>> .如果要保存任意长度的字节数组,请使用 std::vetor<std::vector<char>> .

int main()
{
using packet=std::array<char,4>; // also works with packet=std::string
// or packet=std::vector<char>

std::vector<packet> packets;

packets.push_back({0x10, 0x10, 0x0, 0x61});
packets.push_back({10, 10, 0, 20});

packet p={0x2,0x4,0xa,0xb};
packets.push_back(p);
}

关于c++ - 将新字段添加到 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33477287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com