码迷,mamicode.com
首页 > 其他好文 > 详细

Algorithm | Vector

时间:2014-06-07 23:28:39      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

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

bubuko.com,布布扣
 1 template<class T>
 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<T&>(operator[](index));
36         return const_cast<T&>((static_cast<const XVector<T>&>(*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 };
bubuko.com,布布扣

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

Algorithm | Vector,布布扣,bubuko.com

Algorithm | Vector

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/linyx/p/3774665.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!