郑州网站开发的公司,广州网站建设服务电话,网站开发 天津,seo指的是搜索引擎目录
1.代码实现
2.注意事项
1.成员变量
2. 不能使用memcpy函数拷贝数据
1.用string类型测试时#xff0c;要考虑到vs可能把数据存储在数组buffer里面
3.insert函数中指针的失效性
1.加引用#xff0c;那么就不能传常量#xff0c;比如v.begin() 3
2.加引用#x…目录
1.代码实现
2.注意事项
1.成员变量
2. 不能使用memcpy函数拷贝数据
1.用string类型测试时要考虑到vs可能把数据存储在数组buffer里面
3.insert函数中指针的失效性
1.加引用那么就不能传常量比如v.begin() 3
2.加引用就只能传变量了 4.erase成员函数的指针的失效性 1.代码实现 2.注意事项
1.成员变量 这边以作者目前的能力还不知道为什么不想string类一样弄头指针size capacity成员变量一样所以也只能目前跟着底层小小的模拟实现一下。
2. 不能使用memcpy函数拷贝数据 如果使用memcpy函数拷贝如果是vector内置类型倒也没有问题但是如果是自定义类型比如string类型那么memcpy只会浅拷贝一下就是之间原封不动的拷贝一下那么_str的指针也是一样的那么下一步delete[]_start就已经把_str给释放掉了那么再调用就会出错了。
1.用string类型测试时要考虑到vs可能把数据存储在数组buffer里面
有些人看了我上面说自定义类型不可以比如string类型有些人就像自己尝试一下。但是vs在string类型中做了小小的优化。它的成员变量不仅仅有_str, _size, _capacity。vs把string做了优化他认为我们在调用得时候大部分都是很小的字符串他就用一个数组存储起来了。 你可以用你vs软件测试一下创建一个string类型比如string s, 然后再sizeof(s),看看其大小。不同系统还不一样2019是28说明存储了16字节大小的数组。16 8(_str) 4(_size) 4(_capacity).但2022就是40, 我想应该存储了32个字节优化时扩大了一倍。 Liunx系统下的g软件答案是8还有待我去探索我会更新
3.insert函数中指针的失效性 在插入时输入的是原地址的pos但是如果插入后的内存不够就会扩容这边的扩容是是不会在原来的位置扩容的所以pos的值会变化所以我们在函数外应用的形参pos就会失效。但有些人就会说了那为什么不用引用呢
1.加引用那么就不能传常量比如v.begin() 3 有人还说加个const不就好了那就本末倒置了pos是要改变的所以底层就只能弄一个返回值让你接收他。
2.加引用就只能传变量了
引用是不可以传任何带计算的。v.begin()就不可以作为形参传值了。做个简单的例子。 4.erase成员函数的指针的失效性
原理和insert一样为什么要分开来说呢有人说如果不是删除最后一个那么其他删除pos肯定有效的值是可以拜访的。但是由于vs系统做了检查所以就完全不可以用的。但是Linux下g系统是允许再次拜访的。但是重点来了代码要有一个性质就是可移植性
所以这边建议不用erase后的pos指针