// Iterator
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
template<class T, long N> //vektor sablon, amely megvalositja a belso iterator osztalyt
class Vector
{
T data[N];
public:
class iterator //iterator inner class, a megfelelo metodusokat meg kell valositani
{
public:
iterator() : _p(0) {} //default konstruktor iterator objektum letrehozasara
iterator(const iterator &it) : _p(it._p) {} //copy konstruktor iterator objektum
T& operator*() { return *_p; } //dereferencia
T* operator->() { return _p; }
iterator& operator++() { ++_p; return *this; } //prefix iterator lepteto muvelet
iterator operator++(int) { iterator temp(*this); ++_p; return temp; } //postfix iterator lepteto muvelet
bool operator==(const iterator &it) { return _p == it._p; } //logikai egyenlo muvelet
bool operator!=(const iterator &it) { return _p != it._p; } //logikai nem egyenlo muvelet
private:
iterator(T* p) : _p(p) {} //private konstruktor, ami megfelelo elemre allitja az iteratort
T* _p; //az iterator altal mutatott elem
friend class Vector<T,N>; //Vector sablon friend definicioja, hogy hasznalhassuk a tipus parametereit iteratoron belul is
};
iterator begin() { return iterator(data); } //egy iterator eloallitasa, ami a vektor elso elemere mutat
iterator end() { return iterator(data + N); } //egy iterator eloallitasa, ami a vektor utolso eleme utani poziciora mutat
Vector<T,N>& operator=(const Vector<T,N>& v) { //vektor ertekadas
for (long i = 0; i < N; ++i)
data[i] = v[i];
return *this;
}
T operator[](long i) const { return data[i]; } //index operatorok feluldefinialasa
T& operator[](long i) { return data[i]; }
};
template<class T, long N>
void init(Vector<T,N>& v) { //vektor feltoltese veletlen elemekkel
typename Vector<T,N>::iterator it;
for (it = v.begin(); it != v.end(); ++it)
*it = rand() % 100;
}
template<class T, long N>
void print(string s, Vector<T,N>& v) { //vektor kiiratasara szolgalo fuggveny
cout << s;
typename Vector<T,N>::iterator it;
for (it = v.begin(); it != v.end(); ++it)
cout << setw(4) << *it;
cout << endl;
}
int main() {
srand(time(0));
Vector<int,5> v;
init(v);
print("v = ", v);
return 0;
}
cpp.zip_operation
版权申诉
30 浏览量
2022-09-22
19:15:43
上传
评论
收藏 3KB ZIP 举报
四散
- 粉丝: 49
- 资源: 1万+
最新资源
- 基于Python的PCA人脸识别算法的原理及实现代码详解+源码+详细代码解析+开发文档+数据(毕业设计&课程设计&项目开发)
- Decision tree20240105(1).ipynb
- zuoyezuoyezuoye
- zuoyezuoyezuoye
- 机械设计电机转子装配设备sw22非常好的设计图纸100%好用.zip
- 作业作业作业作业作业作业
- xdotool.c
- RLMD鲁棒性局部均值分解信号分量可视化(Matlab完整源码和数据)
- Screenshot_2024-04-26-17-17-26-36_9d26c6446fd7bb8e41d99b6262b17def.jpg
- 6.0版本超广角文件+教程使用MT管理器打-7.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈