[英]Adding new field to a c++ vector
我正在开发一个用于发送和接收数据包的应用程序。
我正在使用std::vector
类(首先我开始制作数组中的数据包,如果您建议一个更好的方法,我很乐意更改此方法)。
我发现此智能功能可将任何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);
}
当然。
std::vector<std::array<char, 4>> packet;
试试这个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.