ऐसे कोड है:लपेटें एसटीएल वेक्टर और इस परिवर्तन से उसकी इटरेटर के व्यवहार
#include <iostream>
#include <vector>
template <class T>
class A{
public:
class iterator : public std::vector<T>::iterator{
public:
T& operator*(){
??
}
};
iterator begin(){
return v.begin(); // error
}
iterator end(){
return v.end(); // error
}
void add(const T& elem){
v.push_back(elem);
}
private:
std::vector<T> v;
};
int main() {
A<int> a;
a.add(2);
a.add(4);
for(A<int>::iterator it = a.begin(); it != a.end(); ++it){
std::cout << *it << std::endl;
}
return 0;
}
यह मेरा खुद का अतिरिक्त कार्यों के साथ std::vector
के लिए एक आवरण है। मैं std::vector
के iterator उपयोग करना चाहते हैं, फिर भी मैं केवल चाहते इटरेटर के लिए operator*
का व्यवहार बदलने के लिए:
T& operator*(){
// do some additional function
// normal behavior, return value of some element in vector
??
}
मैं std::vector
कैसे उपयोग कर सकते हैं और केवल operator*
के संशोधन के साथ अपने इटरेटर? मैं इटरेटर के लिए begin()
और end()
जैसे कार्यों को लपेटना चाहूंगा, उन्हें सही ढंग से कैसे लपेटें?
संपादित करें:
#include <iostream>
#include <vector>
template <class T>
class A {
public:
class iterator : public std::vector<T>::iterator {
public:
iterator(typename std::vector<T>::iterator c) : std::vector<T>::iterator(c) {
}
T& operator*() {
std::cout << "Im overloaded operator*\n";
return std::vector<T>::iterator::operator *();
}
};
iterator begin() {
return iterator(v.begin());
}
iterator end() {
return iterator(v.end());
}
void add(const T& elem) {
v.push_back(elem);
}
private:
std::vector<T> v;
};
int main() {
A<int> a;
a.add(2);
a.add(4);
for (A<int>::iterator it = a.begin(); it != a.end() ; ++it) {
std::cout << *it << std::endl;
}
return 0;
}
शायद यह किसी के लिए उपयोगी होगा:
इस विषय में जवाब से सुझाव का उपयोग करना, मैं निम्नलिखित तरीके से मेरी समस्या को हल करने में कामयाब रहे।
यूप। मैंने कोड को गलत तरीके से पढ़ा। पता नहीं वो कैसे हुआ। –