Есть шаблонная очередь с использованием vector
Как инстанцировать для своего класса, представляющего строку, изготовленную из vector<char>?
template <class T> class mydeque {
protected:
vector<T> first; //первый вектор - используется для вставки в начало очереди
vector<T> second; //второй вектор - используется для вставки в конец очереди
public:
mydeque()
{
};
~mydeque()
{
};
void shift(const T& val) // функция добавления элемента в начало очереди
{
first.push_back(val);
}
void push(const T& val) //функция добавления элемента в конец очереди
{
second.push_back(val);
}
void print()
{
vector<T>::iterator cur;
for (cur=first.begin();cur<first.end();cur++)
cout<<*cur;
for (cur=second.begin();cur<second.end();cur++)
cout<<*cur;
}
private:
};
Здравствуйте, kodermax, Вы писали:
K>Есть шаблонная очередь с использованием vector
K>Как инстанцировать для своего класса, представляющего строку, изготовленную из vector<char>?
K>K>template <class T> class mydeque {
K>protected:
K> vector<T> first; //первый вектор - используется для вставки в начало очереди
K> vector<T> second; //второй вектор - используется для вставки в конец очереди
K>public:
K> mydeque()
K> {
K> };
K> ~mydeque()
K> {
K> };
K> void shift(const T& val) // функция добавления элемента в начало очереди
K> {
K> first.push_back(val);
K> }
K> void push(const T& val) //функция добавления элемента в конец очереди
K> {
K> second.push_back(val);
K> }
K> void print()
K> {
K> vector<T>::iterator cur;
K> for (cur=first.begin();cur<first.end();cur++)
K> cout<<*cur;
K> for (cur=second.begin();cur<second.end();cur++)
K> cout<<*cur;
K> }
K>private:
K>};
K>
Как инстанцировать ? Да как обычно (обратите внимание на пробел между закрывающими угловыми скобками):
mydeque<vector<char> > Deque;
Только строку vector<T>::iterator cur в методе print нужно дополнить ключевым словом typename:
typename vector<T>::iterator cur;
Здравствуйте, okman, Вы писали:
O>Здравствуйте, kodermax, Вы писали:
K>>Есть шаблонная очередь с использованием vector
K>>Как инстанцировать для своего класса, представляющего строку, изготовленную из vector<char>?
K>>K>>template <class T> class mydeque {
K>>protected:
K>> vector<T> first; //первый вектор - используется для вставки в начало очереди
K>> vector<T> second; //второй вектор - используется для вставки в конец очереди
K>>public:
K>> mydeque()
K>> {
K>> };
K>> ~mydeque()
K>> {
K>> };
K>> void shift(const T& val) // функция добавления элемента в начало очереди
K>> {
K>> first.push_back(val);
K>> }
K>> void push(const T& val) //функция добавления элемента в конец очереди
K>> {
K>> second.push_back(val);
K>> }
K>> void print()
K>> {
K>> vector<T>::iterator cur;
K>> for (cur=first.begin();cur<first.end();cur++)
K>> cout<<*cur;
K>> for (cur=second.begin();cur<second.end();cur++)
K>> cout<<*cur;
K>> }
K>>private:
K>>};
K>>
O>Как инстанцировать ? Да как обычно (обратите внимание на пробел между закрывающими угловыми скобками):
O>O>mydeque<vector<char> > Deque;
O>
O>Только строку vector<T>::iterator cur в методе print нужно дополнить ключевым словом typename:
O>O>typename vector<T>::iterator cur;
O>
И тогда перестаёт работать print
Здравствуйте, kodermax, Вы писали:
K>И тогда перестаёт работать print
Правильно перестает. Потому что нет оператора << для std::vector<>.
Можно добавить нечто такое и все заработает.
#include <iterator>
template <class T>
std::ostream & operator<<(std::ostream & out, std::vector<T> const & x)
{
std::copy(x.begin(), x.end(), std::ostream_iterator<T>(out, " "));
return out;
}