Хранить данные разных типов в векторе <char>? - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь написать универсальную функцию, которая приводит и сохраняет аргументы разных типов данных в vector<char>.Под приведением я имею в виду, что представление битов сохраняется в векторе символов.Например, 4 байта int, такие как 0x19a4f607, будут храниться в векторе как vc[0] = 0x19, vc[1] = 0xa4, vc[2] = 0xf6 и vc[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 ]

1 голос
/ 03 августа 2011

Непосредственной проблемой здесь является то, что вы не приложили никаких усилий для изменения размера вектора, поэтому вы сразу же списываете конец базового массива. Вы должны предшествовать вызову copy() с помощью vc.resize(vc.size() + sizeof(T)) или использовать итератор вставки std::back_inserter для принудительного поведения push_back () в копии.

Теперь я предполагаю, что у вас есть веская причина для подрыва системы типов ...

1 голос
/ 03 августа 2011

Вам нужен итератор, который способен вставлять в конец вектора;.begin() и .end() способны изменять только существующие элементы.Попробуйте std::back_inserter(vc).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...