我是C ++的新手,我不懂C ++中的一些语法复制赋值和复制构造函数:
复制构造函数:
vector::vector(const vector& arg)
// allocate elements, then initialize them by copying
:sz{arg.sz}, elem{new double[arg.sz]}
{
copy(arg,arg+sz,elem); // std::copy(); see §B.5.2
}
复制分配:
class vector {
int sz;
double* elem;
public:
vector& operator=(const vector&); // copy assignment
//...
};
vector& vector::operator=(const vector& a)
// make this vector a copy of a
{
double* p = new double[a.sz]; // allocate new space
copy(a.elem,a.elem+a.sz,elem); // copy elements
delete[] elem; // deallocate old space
elem = p; // now we can reset elem
sz = a.sz;
return *this; // return a self-reference (see §17.10)
}
我不明白的是:
为什么在复制构造函数中我们复制像这样的元素:
copy(arg,arg + sz,elem)
,但是在这样的副本分配中:copy(a.elem,a.elem + a.sz,elem)
?
你能解释一下这个区别吗?
答案 0 :(得分:0)
不同之处在于参数的名称和传递给std:: copy
的类型。
std:: copy
是模板化函数;因此它改变了参数的类型(double,int,string,...)
您需要担心的是参数说明(来自http://en.cppreference.com/w/cpp/algorithm/copy)
template< class InputIt, class OutputIt >
OutputIt copy( InputIt first, InputIt last, OutputIt d_first );
first,last - 要复制的元素范围
d_first - 目标范围的开头。