Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ С++ и работа с Stl

Автор: w@rlock 10.01.2007 2:40

помогите исходниками программы, которая создает контейнер, выделяет память для него, в программе дожны быть сравнения со стандартными видами памяти, хорошо бы использование любого алгоритма (например поиска, сортировки). иными словами в программе нужно создать контейнер и с ним "поиграть", чтобы посмотреть всю мощь STL. может кто-нибудь такое уже делал ??

Автор: volvo 10.01.2007 2:44

Какой контейнер тебя интересует? В STL их как минимум 7 штук...

Что значит, сравнение со стандартными видами? То есть, тебе надо сделать нечто (к примеру, список, или дек) вручную, и потом сравнить это с STL-реализацией?

Автор: w@rlock 10.01.2007 22:15

например, вектор или опять таки очередь (допустим из целых чисел) smile.gif как можно сделать какой-нибудь алгоритм с использованием STL ? wink.gif
Например:


// Пример работы с STL библиотекой на основе вектора
#include <iostream>
#include <vector>

using namespace std;

int main () {

vector <int> a;
cout << "\n Модуль тест для работы с библиотекой STL";

cout << "Created vector a, size of vector: " << a.size() << "and capacity of vector: " << a.capacity();
cout << "Please resize vector:";
int N;
cin >> N;
a.resize(N);
cout << "\nOk";
cout << "Now vector a, size of vector: " << a.size() << "and capacity of vector: " << a.capacity();
....
}


Как заполнять векторы и менять его значениями всё понятно. Но кто поможет написать алгоритм какой-нибудь сортировки несколькмих векторов или поиска вектора и, например, замерить время работы алгоритма (при этом желательно выводить различные результаты работы программы на экран как можно больше)? dry.gif blink.gif smile.gif

Автор: volvo 10.01.2007 23:53

Пойдет? (в MinGW отработало без проблем)

#include <stdlib.h>
#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

int main () {

vector <int> a;
ostream_iterator <int> iter (cout, " ");

cout << "\n STL test";

cout << "\nCreated vector a, size of vector: " << a.size() << " and capacity of vector: " << a.capacity();
cout << "\nPlease resize vector:";

int N;
cin >> N;
a.resize(N);
cout << "\nOk";
cout << "Now vector a, size of vector: " << a.size() << "and capacity of vector: " << a.capacity();

for(int i = 0; i < N; ++i)
a[i] = rand() % 100;
clock_t start = clock();
cout << "\nbefore sort:" << endl;
copy (a.begin(), a.end(), iter);

sort (a.begin(), a.end(), greater<int>()); // Сортируем по убыванию

cout << "\nafter sort:" << endl;
copy (a.begin(), a.end(), iter);
clock_t end = clock();
cout << endl;

cout << "\n working time = " << (end - start) << " ticks";
return 0;
}

Автор: w@rlock 11.01.2007 1:05

конечно! smile.gif good.gif
терь осталось понять что такое:


ostream_iterator <int> iter (cout, " "); ?

// понятно, что это начало замера времени, но что значит clock_t ?
clock_t start = clock();


Это я так понимаю вывод, но из какой он библиотеки? Где прототип можно найти?

copy (a.begin(), a.end(), iter);


Я, блин, руками вывод писал sad.gif:

for (int i=0; i<a.size(); i++) cout << a[i] << " ";


Тоже самое, где можно прототип найти?

sort (a.begin(), a.end(), greater<int>());


И если можно то как сравнение двух векторов сделать? Или например проверить их перпендикулярность с помощью STL возможно? wink.gif

Автор: volvo 11.01.2007 1:15

Цитата
Это я так понимаю вывод, но из какой он библиотеки? Где прототип можно найти?
Здесь:
http://www.sgi.com/tech/stl/copy.html

Цитата
Тоже самое
Ну, сам же сказал, что то же самое:
http://www.sgi.com/tech/stl/sort.html

Цитата
как сравнение двух векторов сделать?
С помощью операции equal:
http://www.sgi.com/tech/stl/equal.html

Автор: w@rlock 11.01.2007 18:52

Огромное спасибо за ссылку на ресурс good.gif good.gif good.gif