0

我正在尝试编写一个通用函数,它将不同数据类型的参数转换并存储到vector<char>. 通过强制转换,我的意思是位表示保留在字符向量中。例如,一个 4 字节的int诸如0x19a4f607将存储在向量中,如vc[0] = 0x19、和。vc[1] = 0xa4vc[2] = 0xf6vc[3] = 0x07

这是我到目前为止所写的,但是我遇到了分段错误。知道如何解决这个问题吗?

template <class T>
void push_T(vector<char>& vc, T n){
  char* cp = (char*)&n;
  copy(cp, cp+sizeof(T), vc.end());
}
4

2 回答 2

1

您需要一个能够在向量末尾插入的迭代器;.begin()并且.end()只能修改现有元素。试试std::back_inserter(vc)

于 2011-08-03T02:21:08.253 回答
1

这里的直接问题是您没有努力调整向量的大小,因此您立即注销了底层数组的末尾。您需要在copy()调用之前使用vc.resize(vc.size() + sizeof(T)),或使用std::back_inserter插入迭代器来强制副本上的 push_back() 行为。

现在,我假设你有充分的理由首先颠覆类型系统......

于 2011-08-03T02:26:29.240 回答