博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algorithm | Vector
阅读量:7110 次
发布时间:2019-06-28

本文共 1358 字,大约阅读时间需要 4 分钟。

 因为平常用的话只是vector的一些非常简单的功能,基本上把它当数组来用,现在也只是把这一部分写了一些。

1 template
2 class XVector { 3 public: 4 XVector(int cacheSize):cacheSize(cacheSize), count(0) { 5 data = new T[cacheSize]; 6 } 7 XVector():cacheSize(100), count(0) { 8 data = new T[cacheSize]; 9 }10 11 ~XVector() { 12 delete[] data;13 }14 15 void push_back(T val) {16 if (count >= cacheSize) {17 cacheSize <<= 1;18 T* copy = new T[cacheSize];19 memcpy(copy, data, sizeof(T) * count);20 delete[] data;21 data = copy;22 }23 data[count++] = val;24 }25 26 void pop_back() {27 count--;28 }29 30 int size() const {31 return count;32 }33 34 T& operator[](int index) {35 //return const_cast
(operator[](index));36 return const_cast
((static_cast
&>(*this))[index]);37 }38 39 const T& operator[](int index) const {40 return data[index];41 }42 43 private:44 int count;45 int cacheSize;46 T *data;47 };

但是注意在用非const的operator[]函数调用const版本的operator[]函数时,应该先用static_cast强制将this转成const,这样才能调用到const版本的函数。这一个过程是安全的。然后再将返回的const T&去掉const,这个过程也是非const函数需要承担的风险。

转载于:https://www.cnblogs.com/linyx/p/3774665.html

你可能感兴趣的文章
jquery动态改变div宽度和高度
查看>>
adroid 目录
查看>>
mybatis map foreach遍历
查看>>
JavaScript实现XML与JSON互转代码(转载)
查看>>
Windows7下的免费虚拟机(微软官方虚拟机)
查看>>
Linux下暴力破解工具Hydra详解
查看>>
Offer是否具有法律效力?
查看>>
Android SQLite系列
查看>>
怎么去掉li标签前面的点??
查看>>
Conjugate prior relationships
查看>>
深入Javascript中apply、call、bind
查看>>
.NET_Framework_version_history
查看>>
Android程序员必备精品资源
查看>>
Oracle SQL函数之转换函数To_char汇总
查看>>
将主机IDS OSSEC日志文件存入MYSQL的方法
查看>>
Linux线程属性总结
查看>>
【原创】Kakfa log包源代码分析(二)
查看>>
Javascript 笔记与总结(2-16)事件对象
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.4.7
查看>>
JAVA存取对象属性时,如果开程多线程,记得对相关存取方法作原子化操作定义...
查看>>