Мне нужно манипулировать данными в фиксированном массиве, включая вставку в середине.
Вместо того, чтобы использовать 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]) ;
}
}
Я использую против 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 ++, отбросьте реализацию массива стиля c.
Использовать только вектор для всей реализации массива "не очень полезно.
Спасибо.