向c++向量添加新字段

Adding new field to a c++ vector

本文关键字:字段 新字段 c++ 向量 添加      更新时间:2023-10-16

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

我正在使用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;

试试这个。