[ create a new paste ] login | about

Link: http://codepad.org/ABfo8I3a    [ raw code | output | fork ]

C++, pasted on Jun 2:
#pragma once
#include <iostream>
#include <cassert>

template <typename T> class Vec {
private:
	T *data;
	int cap, sz;
	void growTo(int newcap);
public:
	Vec();
	~Vec();
	void add(T value);
	T get(int idx) const;
	T removeLast();
	int size() const;
	bool isEmpty() const;
	friend std::ostream& operator<<(std::ostream& stream, const Vec<T>& v){
		stream << "[";
		if (v.size() > 0) {
			stream << v.get(0);
		}
		for (int i = 1; i < v.size(); ++i) {
			stream << "," << v.get(i);
		}
		return stream << "]";
	}
};

template <typename T> Vec<T>::Vec() {
	data = NULL;
	cap = 0;
	sz = 0;
}

template <typename T> Vec<T>::~Vec() {
	delete[] data;
}

template <typename T> void Vec<T>::growTo(int newcap) {
	T *newdata = new T[newcap];
	for (int i = 0; i < sz; ++i) {
		newdata[i] = data[i];
	}
	delete[] data;
	data = newdata;
	cap = newcap;
}

template <typename T> void Vec<T>::add(T value) {
	if (cap == sz) {
		growTo((cap + 1) * 2);
	}
	data[sz++] = value;
}

template <typename T> T Vec<T>::get(int idx) const {
	assert(0 <= idx && idx < sz);
	return data[idx];
}

template <typename T> T Vec<T>::removeLast() {
	assert(sz > 0);
	return data[--sz];
}

template <typename T> int Vec<T>::size() const {
	return sz;
}

template <typename T> bool Vec<T>::isEmpty() const {
	return sz == 0;
}

//template <typename T> std::ostream& operator<<(std::ostream& stream, const Vec<T>& v) {
//	stream << "[";
//	if (v.size() > 0) {
//		stream << v.get(0);
//	}
//	for (int i = 1; i < v.size(); ++i) {
//		stream << "," << v.get(i);
//	}
//	return stream << "]";
//}


Output:
1
Line 8: error: #pragma once in main file


Create a new paste based on this one


Comments: