c++ 如何把char[]转存到allocator<char>

让自己设计一个类似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 ; 替换了那行就能正常运行。
正确的应该怎么初始化啊。

阅读 1.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题