将不同类型的数据存储到向量<char>?</char>中

时间:2011-08-03 02:17:48

标签: c++ casting generic-programming

我正在尝试编写一个泛型函数,将不同数据类型的参数转换并存储到vector<char>中。通过强制转换,我的意思是位表示保留在字符向量中。例如,int这样的4字节0x19a4f607将作为vc[0] = 0x19vc[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());
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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