向c++向量添加新字段
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;
试试这个。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 存储在哪个内存段(代码/数据段)类(员工)中?
- C 套接字误差(新的初始器表达式列表被视为复合表达式)
- 没有新字段 c++ 的派生类的非虚拟销毁
- 将控件作为成员字段传递给使用新 connect() 调用的方法
- 如何在不输出新行的情况下更新终端中的输出字段
- 运算符新字段值在多重继承中具有错误的偏移量
- 向c++向量添加新字段
- 套接字将在一段时间后死亡而不能重新连接
- 在矢量中创建新的空字段
- c++套接字-用新行发送消息(linux)