T是内置类型(int)或者是浅
拷贝
自定义类型(date),他们增容和
拷贝
构造中,
使用
memcpy是没有问题的;
但是T是深
拷贝
自定义类型(string),他们增容和
拷贝
构造中,
使用
memcpy浅
拷贝
,指向1块相同的空间,是有问题的;
STL库里面是类型萃取区分类型(了解):memcpy效率更高(内置类型,浅
拷贝
自定义类型),遍历+深
拷贝
自定义类型(string)的赋值运算符重载会,开空间+
拷贝
构造效率更低(深
拷贝
自定义类型)
1、
vector
是一个构造对象,不能直接
使用
=符号进行复制,必须迭代每个元素来复制。或者重载=操作符。2、大致有一下几种方法实现用于把一个
vector
复制给另一个
vector
:方法1:
vector
v1(v2);//声明方法2:
使用
swap进行赋值:
vector
v1();v1.swap(v2);//将v2赋值给v1,此时v2变成了v1方法3:
使用
函数assign进行赋值:
vector
v1;//
VECTOR
声明初始化,方法很多,我们这里不展开来说,
使用
最基本的方法:
vector
<int> link; //声明
vector
对象link.push_back(1); //初始化link.push_back(2);
VECTOR
复制/
拷贝
办法归结下来有以下几种方法。
1
vector
初始...
①insert函数中迭代器pos失效
②insert传参是值
拷贝
导致的it迭代器失效
(3)it指向位置意义改变也称为迭代器失效...........................
vector
中的
拷贝
操作中会给传入对象开辟新的空间,并将这个对象赋值给新空间的对象。
对于自定义类类型,
vector
会调用其
拷贝
构造函数(如果没有
拷贝
构造函数,会调用其默认
拷贝
构造函数,这里可能涉及到深
拷贝
和浅
拷贝
的问题)
class String {
public:
String(const char* str) {
cout << "String construct" << endl;
有的时候,我们需要提取某个现有的
vector
中的元素到另一个
vector
中,或者对多维的
vector
进行纬度的转换。在这种场景下,往往原始的
vector
中的数据可能并不需要了,为了节省内存空间,我们可以
使用
STL的移动语义。实现元素移动的常见方法有3种。通过例子的形式说明.