Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2014, 23:00   #1
KochI
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию STL список. Не понятно.

Доброго времени суток, форумчане!
Суть в том - Есть некое задание... В нем стоит условие:
Для хранения данных использовать текстовый файл.
У там должно хранится "Номер поезда" "Куда едет" "Время отправки"
Я сначала риализовал при помощи структуры. Это было довольно таки просто.
Код:
struct Informer
	{
		char item[20];
		char Platform[20];
		char TimeBack[20];
}; Informer mas[10];
Код:
void SetInformer(Informer * mas)
{
	ifstream in;
	in.open("File.txt");
	int i = 1;
	int n = 0;
	while (!in.eof())
	{
		n++;
		if (n != 4)
			switch (n)
		{
			case 1: in >> mas[i].item;
				break;
			case 2: in >> mas[i].Platform;
				break;
			case 3: in >> mas[i].TimeBack;
				break;
		}
		else { n = 0; i++; }
	}
}
Просто заносил все в массив, после чего считывал - ну, было удобно...
Но, Структуру нельзя использовать. Сказали, для хранения данных использовать списки...
И меня озадачило, как мне реализовать это?

Код:
//Смог считать из файла, то что мне нужно. И тд...
void main(void)
{
	list<string> mylist;
list<string>::iterator i = mylist.begin();
	ifstream in;
	in.open("File.txt");
	string n;
	while (!in.eof())
	{
		in >> n;
		mylist.insert(i, 1, n);
	}
	cout << mylist.size()<< endl;
	mylist.sort();
	std::copy(mylist.begin(), mylist.end(), ostream_iterator<string>(cout, "_"));
Тк, суть в том, что не понятно как теперь мне сделать тот аналог который я сделал со структурой в списке?
Допустим мне нужно будет найти поезда которые едут после 16:00:00, Как мне так организовать список, что бы я смог считать "Номер поезда" "Куда едет" - ну естественна, те которые едут после 16:00:00...
Надеюсь понятно объяснил -.-
Буду благодарен за помощь!

Последний раз редактировалось KochI; 10.02.2014 в 23:02.
KochI вне форума Ответить с цитированием
Старый 11.02.2014, 06:26   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
Просто заносил все в массив, после чего считывал - ну, было удобно...
Но, Структуру нельзя использовать. Сказали, для хранения данных использовать списки...
Что-то вы не так поняли. Скорее всего ван нельзя массивы использовать. Списки обычно реализуются на структурах/классах.

Цитата:
Тк, суть в том, что не понятно как теперь мне сделать тот аналог который я сделал со структурой в списке?
или в
Код:
struct Informer
	{
		char item[20];
		char Platform[20];
		char TimeBack[20];
};
добавляете указатель (указатель) и реализуете список
или
Код:
list<Informer> mylist;
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 11.02.2014, 16:15   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Код:
list<string> mylist;
Вместо string указываете структуру, в которой храните данные.
При считывании из файла создаете объект структуры и вставляете его в список целиком. Само считывание как в том виде ,в котором оно было без списка.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 11.02.2014, 22:50   #4
KochI
 
Регистрация: 08.12.2012
Сообщений: 6
По умолчанию

Примерно так?
Код:
#include <iostream>
#include <fstream>
#include <list>
using namespace std;
 
struct Informer
{
    char item[20];
    char Platform[20];
    char TimeBack[20];
};
 
void SetInformer(list<Informer> & lst)
{
    ifstream in;
    in.open("C:\\File.txt");
    while (!in.eof())
    {
        Informer tmp;
        in >> tmp.item >> tmp.Platform >> tmp.TimeBack;
        lst.push_back(tmp); 
    }
}
Как мне теперь "Общаться" с этим? Как проводить манипуляции, к примеру, найти все пятерки, или как хотя бы просто вывести на экран, то, что я сохранил в список? :\
Так не выводи на экран:
Код:
list<Informer> l_inf;
SetInformer(l_inf);
copy(l_inf.begin(), l_inf.end(), ostream_iterator<char/*Или что сюда?*/>(cout, " "));
KochI вне форума Ответить с цитированием
Старый 12.02.2014, 09:38   #5
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Как происходит считывание списка в цикле пример есть на странице http://www.cplusplus.com/reference/iterator/begin/
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 13.02.2014, 14:05   #6
vvmcpp
Форумчанин
 
Аватар для vvmcpp
 
Регистрация: 11.12.2010
Сообщений: 116
По умолчанию

вывести список на экран(пример):
Код:
// вывод списка
void out(const char* s,const list<int> &L)
    {
        cout<<s;
        copy(L.begin(),L.end(),
        ostream_iterator<int>(cout," "));
        cout<<endl;
    }
первый аргумент функции строка, второй аргумент список

Пример использования в main этой функции:
Код:
//создаем список myL1
    list<int> myL;

 // создаем итератор списка нужен будет для манипуляций со списком
    list<int>::iterator new_end;

// заполнили его чем-то

//потом выводите
 out(" список  myL:\n",myL);


// потом если у вас два например списка , то вы легко можете их объединить
Например:
Код:
//создаем списки myL1 и myL2
    list<int> myL1;
 list<int> myL2;
// заполняем их чем-то

и объединяем
myL1.merge(myL2);

Последний раз редактировалось vvmcpp; 13.02.2014 в 14:30. Причина: дополнение
vvmcpp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STL в QT конфликтует с STL в Borland nvrrus C++ Builder 0 31.03.2011 10:51
STL цыкличиский список ("")(Э_Є)("") Общие вопросы C/C++ 6 07.05.2009 02:23
легко, но не понятно? ЖЕНЕЧКА Паскаль, Turbo Pascal, PascalABC.NET 1 19.04.2009 00:13