Algorithm | Vector

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


 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 };

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

Algorithm | Vector,布布扣,bubuko.com

时间: 2024-10-09 22:14:16

Algorithm | Vector的相关文章

Codility上的练习 (9)

(1) CountSemiprimes 半质数的定义是恰好两个质数(可以相同)乘积的数,例如 4, 6, 9, 10, 14, 15, 21, 22, 25, 26,都是半质数.给定N,长度为M的等长整数数组P和Q,满足1 ≤ P[K] ≤ Q[K] ≤ N, 求每个区间[P[k], Q[k]]之间有多少个半质数. 函数头部:vector<int> solution(int N, vector<int> &P, vector<int> &Q); 数据范围

角点检测:Harris角点及Shi-Tomasi角点检测

角点 特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系.点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(keypoint feature),或“兴趣点”(interest point),或“角点”(conrner). 关于角点的具体描述可以有几种: 一阶导数(即灰度的梯度)的局部最大所对应的像素点: 两条及两条以上边缘的交点: 图像中梯度值和梯度方向的变化速率都很高的点: 角点处的一阶导数最大,二阶导数

C++ STL 简单记录

1,STL提供三种类型的组件:容器.迭代器.算法. 容器: 顺序容器(vector.list.deque.string等)是一系列元素的有序集合: 关联容器(set.multiset.map.multimap)包含查找元素的键值. 迭代器:作用是遍历容器. for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } //迭代器是依附于容

STL容器的常用用法

1.vector: #include <vector>#include <algorithm> vector<int> v;vector<int> v(10);//定义大小为10的int型向量容器.vector<int> v(10,3);//定义大小为10,每个元素为3. v.push_back(2);//尾部添加元素2.v[0]=2;v[1]=3;//下标访问. vector<int>::iterator it;//迭代器访问for

C++ STL的sort 函数 以及自定义的比较函数

没什么特别擅长的内容,先做个小笔记好了.在编程时,使用C++的标准模板库(STL)能节约工作量,增加代码的可读性,能灵活运用无疑会提高编程的效率,俗话说:Write less, create more ~ 然后这篇笔记就简单讨论一下sort函数吧.对于vector,我们使用algorithm头文件中的sort函数来排序元素,如果元素类型是实数.字符串之类的,直接使用sort 函数就可以方便的排序了.使用方法就是: #include <vector> #include <algorithm

OpenCV亚像素级的角点检测

亚像素级的角点检测 目标 在本教程中我们将涉及以下内容: 使用OpenCV函数 cornerSubPix 寻找更精确的角点位置 (不是整数类型的位置,而是更精确的浮点类型位置). 理论 代码 这个教程的代码如下所示.源代码还可以从 这个链接下载得到 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #inclu

OpenCV Tutorials &mdash;&mdash; Detecting corners location in subpixeles

亚像素精度(更加精确) ~~ void cornerSubPix(InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, TermCriteriacriteria) Parameters: image – Input image. corners – Initial coordinates of the input corners and refined coordinates provided for o

【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测

角点 特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系.点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(keypoint feature),或“兴趣点”(interest point),或“角点”(conrner). 关于角点的具体描述可以有几种: 一阶导数(即灰度的梯度)的局部最大所对应的像素点: 两条及两条以上边缘的交点: 图像中梯度值和梯度方向的变化速率都很高的点: 角点处的一阶导数最大,二阶导数

OpenCV Tutorials &mdash;&mdash; Shi-Tomasi corner detector

Shi-Tomasi 算法是Harris 算法的改进. Harris 算法最原始的定义是将矩阵 M 的行列式值与 M 的迹相减,再将差值同预先给定的阈值进行比较.后来Shi 和Tomasi 提出改进的方法,若两个特征值中较小的一个大于最小阈值,则会得到强角点.   void goodFeaturesToTrack(InputArray image, OutputArray corners, int maxCorners, double qualityLevel, doubleminDistanc