Мне нужно манипулировать данными в фиксированном массиве, включающим среднюю вставку. Вместо использования memcpy и т.д. Я хочу использовать вектор. У меня проблема, когда я хочу для копирования векторных элементов обратно в массив c-style. Здесь код:
void tryvector()
{
using namespace std;
const int MAX_SIZE=16;
BYTE myarr[MAX_SIZE]={0xb0,0x45,0x47,0xba,0x11,0x12, 0x4e};
vector<BYTE> myvec (myarr, myarr+MAX_SIZE);
vector<BYTE>::iterator it;
printf("myarr pre :");
for(int i=0;i<MAX_SIZE;++i){
printf("%02x ", myarr[i]) ;
}
printf("\nmyvec pre :")
for(it=myvec.begin(); it<myvec.end();++it){
cout<<hex<<static_cast<int>(*it)<<" ";
}
it = myvec.begin()+ 3;
myvec.insert(it,0x5f);
printf("\nmyvec post:");
for(it=myvec.begin(); it<myvec.end();++it){
cout<<hex<<static_cast<int>(*it)<<" ";
}
copy(myvec.begin(), myvec.end(), myarr); //???
printf("\nmyarr post:");
for(int i=0;i<MAX_SIZE;++i){
printf("%02x ", myarr[i]) ;
}
}
Я использую vs 2005.
Здесь предупреждение:
warning C4996: 'std::_Copy_opt' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\xutility(2270) : see declaration of 'std::_Copy_opt'
1> Message: 'You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library'
1> c:\documents and settings\mhd\my documents\tesvector.cpp(50) : see reference to function template instantiation '_OutIt std::copy<std::_Vector_iterator<_Ty,_Alloc>,BYTE*>(_InIt,_InIt,_OutIt)' being compiled
1> with
1> [
1> _OutIt=BYTE *,
1> _Ty=BYTE,
1> _Alloc=std::allocator<BYTE>,
1> _InIt=std::_Vector_iterator<BYTE,std::allocator<BYTE>>
1> ]
Когда я запустил его, я получил следующую ошибку во время выполнения:
Run-Time Check Failure #2 - Stack around the variable 'myarr' was corrupted.
Обратите внимание, что я использую вектор вместо списка или deque, потому что
"средняя вставка", как и код выше, является особой проблемой.
Это произойдет меньше, чем "вставка в конце" и
"случайный доступ к элементу".
Любое решение?
Любой ответ, который напоминает: "Вы используете С++, отбрасываете реализацию массива стиля c. Использовать только вектор для всей реализации массива "не очень полезно.
Спасибо.