// ---------------------------
// ConstructorsDestructors.c++
// ---------------------------
#include <algorithm> // copy, equal, fill
#include <cassert> // assert
#include <cstddef> // size_t
#include <iostream> // cout, endl
#include <iterator> // distance
template <typename T>
class my_vector {
private:
const std::size_t _s;
T* const _a;
public:
my_vector (std::size_t s, const T& v = T()) :
_s (s),
_a (new T[_s]) {
std::fill(begin(), end(), v);}
template <typename II>
my_vector (II b, II e) :
_s (std::distance(b, e)),
_a (new T[_s]) {
std::copy(b, e, begin());}
~my_vector () {
delete [] _a;}
T* begin () {
return _a;}
const T* begin () const {
return _a;}
T* end () {
return _a + _s;}
const T* end () const {
return _a + _s;}
std::size_t size () const {
return _s;}};
int main () {
using namespace std;
cout << "ConstructorsDestructors.c++" << endl;
{
const my_vector<double> x(10);
assert(x.size() == 10);
}
{
const my_vector<double> x(10, 2.34);
assert(x.size() == 10);
}
{
const long a[] = {2, 3, 4};
const int s = sizeof(a) / sizeof(a[0]);
const my_vector<double> x(a, a + s);
assert(equal(x.begin(), x.end(), a));
}
cout << "Done." << endl;
return 0;}
syntax highlighted by Code2HTML, v. 0.9.1