让自己设计一个类似string的类型 要求有一个构造函数是能接受char*类型的参数
c++ primer 5th中习题
我是想用vector[char]当做中转存储变量,为了方便给allocator初始化用
相关代码
class MyString {
MyString();
MyString(char*);
allocator<char> alloc_char;
};
MyString::MyString()
{
}
MyString::MyString(char* tc){ //传入一个char[]类型的参数。 类目的:支持一个
//char[]类型的初始化 实现string的基本操作
int num = sizeof(tc); //获取数组大小
vector<char> trans(tc,tc+num); //为了方便给allocator[]类型初始化创建一个
//vector[] 当做中变量间
//allocator<char> alloc_char; //分配内存变量
auto const p = alloc_char.allocate(num); //分配所需数量的内存
auto q = uninitialized_copy(trans.begin(),trans.end(),p);
//将上一行替换成auto q=p;之后能正常运行 想知道正确用法应该什么样
//q指向最后构造的元素之后的位置
/*
{ //处理过程省去
}*/
while (q != p) //q应该指向最后构造的元素之后的位置
alloc_char.destroy(--q);
alloc_char.deallocate(p, num);
//auto tc_begin = tc.begin();
}
int main()
{
NULL;
return 0;
}
我本来希望能把char*转存到allocator[char]成功后,再进行其它过程。?
实际看到的错误信息:
错误 C4996 'std::uninitialized_copy::_Unchecked_iterators::_Deprecate': Call to 'std::uninitialized_copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' (行)53
错误定位代码(在头文件<memory>中):
template<class _InIt,
class _FwdIt> inline
_FwdIt uninitialized_copy(_InIt _First, _InIt _Last,
_FwdIt _Dest)
{ // copy [_First, _Last) to raw [_Dest, ...)
_DEPRECATE_UNCHECKED(uninitialized_copy, _Dest);
_DEBUG_RANGE(_First, _Last);
const auto _UFirst = _Unchecked(_First);
const auto _ULast = _Unchecked(_Last);
const auto _UDest = _Unchecked_n(_Dest, _Idl_distance<_InIt>(_UFirst, _ULast));
return (_Rechecked(_Dest,
_Uninitialized_copy_unchecked(_UFirst, _ULast, _UDest, _Ptr_copy_cat(_UFirst, _UDest))));
}
我小白看不太懂,应该是allocator初始化问题。 用 auto q=p ; 替换了那行就能正常运行。
正确的应该怎么初始化啊。