public class QueueUsingStacks<T>
{
private LinkedListStack<T> stack1;
private LinkedListStack<T> stack2;
public QueueUsingStacks()
{
stack1=new LinkedListStack<T>();
stack2 = new LinkedListStack<T>();
}
public void Copy(LinkedListStack<T> source,LinkedListStack<T> dest )
{
while(source.Head!=null)
{
dest.Push(source.Head.Data);
source.Head = source.Head.Next;
}
}
public void Enqueue(T entry)
{
stack1.Push(entry);
}
public T Dequeue()
{
T obj;
if (stack2 != null)
{
Copy(stack1, stack2);
obj = stack2.Pop();
Copy(stack2, stack1);
}
else
{
throw new Exception("Stack is empty");
}
return obj;
}
public void Display()
{
stack1.Display();
}
}
Для каждой операции добавления в очередь мы добавляем в начало стека1. Для каждой очереди мы опускаем содержимое стека 1 в стек 2 и удаляем элемент в верхней части стека. Сложность времени O (n) для очереди, так как мы должны скопировать stack1 в stack2. Временная сложность enqueue такая же, как и у обычного стека
Qt IMHO очень похож на java. Т.е. они предпочитают Итераторы в стиле Java , а не STL. Qt включает сети ( примеры ) и многое другое (например, создание сценариев через javascript)
Вы смотрели библиотеки Boost ?
Библиотеки Boost предоставляют аналогичные возможности по сравнению с API Java, но они очень «выглядят и ощущаются» - соответственно - как библиотеки C ++.
Библиотека C ++, которая выглядела бы как Java, была бы плохой библиотекой, ИМХО. Эти два языка настолько различны, что то, что является хорошим дизайном для одного, почти неизбежно будет плохим дизайном для другого.
Существует также возможность использовать что-то вроде POCO , что немного проще, чем использование чего-то вроде Boost, но при этом кросс-платформенный.
Хотя я использовал HTTP в Java только очень давно, интерфейс библиотеки POCO выглядит довольно простым в использовании. Он дает пример базового использования FTP примерно так:
Poco::Net::FTPStreamFactory::registerFactory();
std::ofstream localFile(inputFile, std::ios_base::out | std::ios_base::binary);
Poco::URI uri(inputURL);
std::auto_ptr<std::istream> ptrFtpStream(Poco::Net::URIStreamOpener::defaultOpener().open(uri));
Poco::StreamCopier::copyStream(*ptrFtpStream.get(), localFile);