History variables: Difference between revisions

Content added Content deleted
m (Corrected a typo.)
(New post.)
Line 522: Line 522:
{{out}}
{{out}}
<pre>foobar <- foo <- 5
<pre>foobar <- foo <- 5
</pre>

=={{header|C++}}==
C++ does not have history variables, but they can easily by implemented with a generic class.
<syntaxhighlight lang="c++">
#include <deque>
#include <iostream>
#include <string>

template <typename T>
class with_history {
public:
with_history(const T& element) {
history.push_front(element);
}

T get() {
return history.front();
}

void set(const T& element) {
history.push_front(element);
}

std::deque<T> get_history() {
return std::deque<T>(history);
}

T rollback() {
if ( history.size() > 1 ) {
history.pop_front();
}
return history.front();
}

private:
std::deque<T> history;
};

int main() {
with_history<double> number(1.2345);
std::cout << "Current value of number: " << number.get() << std::endl;

number.set(3.4567);
number.set(5.6789);

std::cout << "Historical values of number: ";
for ( const double& value : number.get_history() ) {
std::cout << value << " ";
}
std::cout << std::endl << std::endl;

with_history<std::string> word("Goodbye");
word.set("Farewell");
word.set("Hello");

std::cout << word.get() << std::endl;
word.rollback();
std::cout << word.get() << std::endl;
word.rollback();
std::cout << word.get() << std::endl;
word.rollback();
std::cout << word.get() << std::endl;
word.rollback();
}
</syntaxhighlight>
{{ out }}
<pre>
Current value of number: 1.2345
Historical values of number: 5.6789 3.4567 1.2345

Hello
Farewell
Goodbye
Goodbye
</pre>
</pre>