нужно объявить список
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
нужно объявить список - 2008-12-12 00:07:06.533333
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
по задаче необходимо хранить данные в двумерном векторе(spisok),но не получается его объявить,помогите,пожалуйста #include <vector> struct point { int x; int y; }; int main() { std::vector<std::vector<int>, spisok>; point first,second; ifstream in_file("in.txt") ; ofstream out_file("out.txt"); int pos1, pos2, numRoads,numPer; in_file >> numRoads >> numPer; point *arr=new point[numPer]; spisok.resize[numPer]; for (int i=0; i<numRoads; i++){ in_file >> first.x>> first.y>> second.x>> second.y>> pos1>> pos2; arr[pos1]=first; arr[pos2]=second; spisok[pos1].push_back(pos2); spisok[pos2].push_back(pos1); } }
|
|
|
RE: нужно объявить список - 2008-12-12 01:06:01.570000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress по задаче необходимо хранить данные в двумерном векторе(spisok),но не получается его объявить,помогите,пожалуйста std::vector<std::vector<int>, spisok>; std::vector< std::vector<int> > spisok; как-то так, не? quote:
ORIGINAL: enchantress int pos1, pos2; spisok[pos1].push_back(pos2); spisok[pos2].push_back(pos1); type mismatch. что ты вообще пытаешься сделать-то?
|
|
|
RE: нужно объявить список - 2008-12-12 01:10:45.543333
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
ага,спасибо,я это уже исправила,теперь пытаюсь вывести список for (int q=0;q<numPer;++q){ for (int j=0; j<spisok[q].size();++j){ cout << spisok[q][j]; а прогу выкидывает из цикла(
|
|
|
RE: нужно объявить список - 2008-12-12 01:12:55.636666
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
int pos1, pos2; spisok[pos1].push_back(pos2); spisok[pos2].push_back(pos1); в цикле в pos1,pos2 считываются номера(перекрестки-по задаче),а потом создаю список тех,которые соединены
|
|
|
RE: нужно объявить список - 2008-12-12 01:38:26.896666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress int pos1, pos2; spisok[pos1].push_back(pos2); spisok[pos2].push_back(pos1); в цикле в pos1,pos2 считываются номера(перекрестки-по задаче),а потом создаю список тех,которые соединены spisok имеет тип std::vector< std::vector<int> >, а это значит что push_back будет ожидать на вход переменную типа std::vector<int>, а уж никак не int как у тебя - type mismatch, вектор-то двумерный но ход мысли мне по нраву
|
|
|
RE: нужно объявить список - 2008-12-12 01:43:03.040000
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
а у меня не выдает ошибок :( я себе это просто представляла как набор "строк",каждый раз в соответствующую добавляется по элементу, а как бы ты предложил организовать такую запись(из входного файла попарно считываются номера соединенных дорогой перекрестков,они повторяются,и я хотела чтобы в записи каждому перекрестку в соответсвие ставились соединенные с ним)
|
|
|
RE: нужно объявить список - 2008-12-12 01:52:40.213333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress а у меня не выдает ошибок :( я себе это просто представляла как набор "строк",каждый раз в соответствующую добавляется по элементу, а как бы ты предложил организовать такую запись(из входного файла попарно считываются номера соединенных дорогой перекрестков,они повторяются,и я хотела чтобы в записи каждому перекрестку в соответсвие ставились соединенные с ним) пардон, я идиот. естественно там нет type mismatch
|
|
|
RE: нужно объявить список - 2008-12-12 01:54:34.276666
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
ну зачем так самокритично) а почему тогда не работает?
|
|
|
RE: нужно объявить список - 2008-12-12 02:02:22.513333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress ну зачем так самокритично) а почему тогда не работает?
typedef std::vector< std::vector<int> >::iterator VecVecIter;
typedef std::vector<int>::iterator VecIter;
VecVecIter oEnd = spisok.end();
for(VecVecIter j = spisok.begin(); j != oEnd; ++j)
{
VecIter iEnd = j->end();
for(VecIter k = j->begin(); k != iEnd; ++k)
{
std::cout << *k << std::endl;
}
}
это касательно вывода
|
|
|
RE: нужно объявить список - 2008-12-12 02:17:17.676666
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
ой,это на с++? а то я только начала учить,и с первого взгляда не совсем понятно,но попробую разобраться
|
|
|
RE: нужно объявить список - 2008-12-12 02:23:11.286666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress ой,это на с++? а то я только начала учить,и с первого взгляда не совсем понятно,но попробую разобраться к сожалению, да - это C++. а boost можно пользовать? убогость стандартных алгоритмов меня убивает :(
|
|
|
RE: нужно объявить список - 2008-12-12 02:25:53.866666
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
в моем случае для начала можно обойтись и убогими стандартными) но согласна,если б в большей степени владела языком программирования-было бы и проше,и красивей,но тут уже стоит задача не красиво написать,а написать к зачету,причем сжатые сроки(
|
|
|
RE: нужно объявить список - 2008-12-12 02:43:22.750000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress в моем случае для начала можно обойтись и убогими стандартными) но согласна,если б в большей степени владела языком программирования-было бы и проше,и красивей,но тут уже стоит задача не красиво написать,а написать к зачету,причем сжатые сроки( вот - с помощью Мэйерса, гугла и такой-то матери - более изящный вариант
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
template <typename T>
class print_vector
{
public:
void operator()(const std::vector<T>& v)
{
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, " "));
std::cout<< " " << std::endl;
}
};
int main()
{
std::vector< std::vector<int> > spisok;
// здесь заполнение вектора
std::for_each(spisok.begin(), spisok.end(), print_vector<int>() );
return 0;
}
а что к зачёту - это плохо. но пишешь ты забавно, обращайся ежели чего ;)
|
|
|
RE: нужно объявить список - 2008-12-12 02:48:26.330000
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
мне нравится, спасибо) у меня там суть задачи даже далеко не в этом состоит,но думаю путем таких вот проб и ошибок я ее напишу)))
|
|
|
RE: нужно объявить список - 2008-12-12 02:57:20.240000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress мне нравится, спасибо) у меня там суть задачи даже далеко не в этом состоит,но думаю путем таких вот проб и ошибок я ее напишу))) я понял. судя по твоим комментариям с фактической стороной проблем быть не должно, ну а в том что касается плюсовых заморочек - всегда рад помочь ;) удачи
|
|
|
RE: нужно объявить список - 2008-12-12 03:31:23.376666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Шаблоны рулят… пока не нарываешься на "INTERNAL COMPILER ERROR at std::list …blablablabla… - please, contact microsoft technical support" всякие (по требованию заказчика - компилер мелкосовтовский). А потом всё красивую архитектуру приходится прибивать на фиг и использовать индусские методы кодокопипастанья. Сейчас точно ситуацию не воспроизведу, но там было из-за сложной архитектуры protected наследования. В инете можно поискать, предлагали обходные "костыли", однако они получались ещё более тяжеловесными, нежели решение "в лоб".
|
|
|
RE: нужно объявить список - 2008-12-12 03:34:05.830000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: _SaZ_ Шаблоны рулят… пока не нарываешься на "INTERNAL COMPILER ERROR at std::list …blablablabla… - please, contact microsoft technical support" всякие (по требованию заказчика - компилер мелкосовтовский). А потом всё красивую архитектуру приходится прибивать на фиг и использовать индусские методы кодокопипастанья. Сейчас точно ситуацию не воспроизведу, но там было из-за сложной архитектуры protected наследования. В инете можно поискать, предлагали обходные "костыли", однако они получались ещё более тяжеловесными, нежели решение "в лоб". дашь конкретный код - покажу в чём проблема; protected наследование - это уже явный признак проблем с дизайном, думаю там и других хватало а по поводу шаблонов скажу так: волков бояться - в лесу не еб~wне ходить то есть
|
|
|
RE: нужно объявить список - 2008-12-12 03:45:00.900000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Проблема в мелкосовтовском компиляторе, а не в protected наследовании. Имхо, мнения, что не public наследование и friend - признак кривой архитектуры - ошибочны.
|
|
|
RE: нужно объявить список - 2008-12-12 03:51:33.570000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: _SaZ_ Проблема в мелкосовтовском компиляторе, а не в protected наследовании. учитывая отсутствие конкретного примера - очень смелое утверждение quote:
ORIGINAL: _SaZ_ Имхо, мнения, что не public наследование и friend - признак кривой архитектуры - ошибочны. во-первых, ты немножко съехал с темы - я говорил конкретно о protected наследовании. а во-вторых, в задницу такие имхи без аргументации. хочешь поговорить об этом - валяй, создавай топик, я пока за пивом схожу ;)
|
|
|
RE: нужно объявить список - 2008-12-12 04:18:25.990000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress мне нравится, спасибо) у меня там суть задачи даже далеко не в этом состоит,но думаю путем таких вот проб и ошибок я ее напишу))) вот ещё более хтонический вариант:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
template <typename T>
class print_vector
{
public:
void operator()(const std::vector<T>& v)
{
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, " "));
std::cout<< " " << std::endl;
}
};
template <typename T>
std::ostream & operator<<(std::ostream & os, std::vector< std::vector<T> > & vec)
{
typename std::vector< std::vector<T> >::iterator beg = vec.begin();
typename std::vector< std::vector<T> >::iterator end = vec.end();
std::for_each(beg, end, print_vector<T>());
return os;
}
теперь там, где надо вывести вектор ты можешь написать просто std::cout << spisok; по-моему так удобней
|
|
|
RE: нужно объявить список - 2008-12-12 12:51:36.780000
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
а ты не мог бы немного пояснить? непосредственно, что такое template? не понятно,каким образом вектор будет заполняться из входящего файла(
|
|
|
RE: нужно объявить список - 2008-12-12 15:19:48.050000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress а ты не мог бы немного пояснить? непосредственно, что такое template? не понятно,каким образом вектор будет заполняться из входящего файла( template - ключевое слово языка C++, предшествующее объявлению (и определнению - в данном случае разнесения на .hpp/.cpp-файлы нет (исключение - экспорт шаблонов, но о нём лучше не задумываться)) обобщённого (параметризованного) типа - шаблона. C++ поддерживает два вида шаблонов: шаблоны классов и шаблоны функций, между ними есть ряд специфических различий в плане парметризации (например, шаблоны классов поддерживают частичную специализацию - а для шаблонов функций действует механизм выведения типов), но общая идея одна - возможность варьировать некоторый набор типов, от которых зависит поведение параметризуемого типа в данном случае класс функции print_vector (функции в C++ не являются first class object, поэтому в околофункциональном стиле как правило используются объекты функций - или функторы - объекты классов, определяющих оператор () - оператор круглых скобок) работает с шаблоном класса std::vector, для использования которого необходимо выполнить подстановку шаблонного параметра (параметризованный тип в C++ не является полным типом, и с ним нельзя производить никакие операции). дабы не ограничивать себя возможностью работать с каким-то одним конкретным типом контейнера, print_vector тоже параметризуется, и просто передаёт свой параметр шаблона дальше - в std::vector. таким образом print_vector может работать с вектором, содаржащим объекты любого типа (в нашей задаче нужен int, но этот же класс можно будет в дальнейшем использовать и для double, и для std::string, и для практически любого другого встроенного либо пользовательского типа) всё, что делает приведённый код - это обработка вывода (pretty print) двумерного вектора с возможностью использовать её в стиле стандартных потоков ввода-вывода C++; заполнения вектора здесь нет. если с заполнением у тебя есть какие-то сложности - могу пояснить как это можно сделать аналогичным образом с помощью std::copy и std::istream_iterator
|
|
|
RE: нужно объявить список - 2008-12-12 16:47:21.083333
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
ага,становится понятней. а инициализацию. которую я использовала,использовать вообще можно? std::vector<std::vector<int>, spisok>; spisok.resize[numPer]; spisok[pos1].push_back(pos2); spisok[pos2].push_back(pos1); ведь заполнение по идее правильное,но на последнем цикле выкидывает я просто хочу чтоб в каждой строке двумерного вектора хранились значения,связанные по условию со значением=номеру этой строки, и получив это значение получать соответсвующие координаты из arr, я даже вроде придумала,как это описать. ты не смотри,что пытаюсь примитивно написать-просто так легче разобраться с самим языком * <typename T>* - имя типа вектора Т?
|
|
|
RE: нужно объявить список - 2008-12-12 17:01:52.590000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress std::vector<std::vector<int>, spisok>; std::vector< std::vector<int> > spisok; quote:
ORIGINAL: enchantress spisok.resize[numPer]; а вот это - хороший и показательных ход; здесь ты не только выделяешься память под необходимые тебе векторы, но и вызываешь для них конструкторы по умолчанию (т.е. после этого вызова ты можешь обращаться по индексам (посредством operator[] или at()) spisok от 0 до numPer - 1 quote:
ORIGINAL: enchantress spisok[pos1].push_back(pos2); spisok[pos2].push_back(pos1); аналогично, здесь всё корректно (во всяком случае я проблем не вижу) quote:
ORIGINAL: enchantress ведь заполнение по идее правильное,но на последнем цикле выкидывает пройдись отладчиком - посмотри, почему выкидывает. могу сделать это за тебя, но самой будет познавательней quote:
ORIGINAL: enchantress * <typename T>* - имя типа вектора Т? T - формальный параметр шаблона, имя типа, которым он параметризуется. в данном случае - да, это тип значений, хранимых в векторе quote:
ORIGINAL: enchantress ты не смотри,что пытаюсь примитивно написать-просто так легче разобраться с самим языком не переживай, в этом треде туплю в основном я
|
|
|
RE: нужно объявить список - 2008-12-12 17:15:51.706666
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
ты на самом деле вселяешь мне надежду на то,что я ее напишу, так что тебе тупить точно нельзя) смотри,мне для проверки надо знать значения трех послдених перекрестков. самый первый я знаю точно,тогда могу сохранить его значение в массиве, где будут храниться все последующие подходящие, и на ряду в этим необходимо хранить значения трех использумемых перекрестков,точнее их координат. как к нии обращаться? если нужный мне хранится во второй строке вектора на i-ом месте его можно же вызвать как spisok.at(1).at(i)? и обращение к координатам в массиве arr, если мне нужен например x с 3-е1 позиции arr[3].x-допустимо?
|
|
|
RE: нужно объявить список - 2008-12-12 17:20:04.393333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress если нужный мне хранится во второй строке вектора на i-ом месте его можно же вызвать как spisok.at(1).at(i)? проще как: spisok[ 1 ] , at() отличается только отсутствием гарантии на проверку выхода за пределы вектора quote:
ORIGINAL: enchantress и обращение к координатам в массиве arr, если мне нужен например x с 3-е1 позиции arr[3].x-допустимо? если я тебя правильно понял, то вполне. у тебя массив структур, соответственно arr[3] = *(arr + 3) :: point, а у типа point есть селектор x P.S. укуреный движок форума, право слово
|
|
|
RE: нужно объявить список - 2008-12-12 17:25:47.290000
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
quote:
проще как spisok[1], spisok[1] например? at() отличается только отсутствием гарантии на проверку выхода за пределы вектора вооот,хотела спросить,как узнать,когда заканчивается строка в векторе? ведь он получается не пропрциональным, тобишь в первой строке может быть n элементов,в следующей n+1 и т.д?
|
|
|
RE: нужно объявить список - 2008-12-12 17:35:08.166666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress spisok[1] например? spisok[1], это всё ублюдочное форматирование этого форума :( quote:
ORIGINAL: enchantress вооот,хотела спросить,как узнать,когда заканчивается строка в векторе? ведь он получается не пропрциональным, тобишь в первой строке может быть n элементов,в следующей n+1 и т.д? во-первых, у std::vector есть метод size(), который вернёт фактическое количество элементов в нём хранящихся; во-вторых, есть метод end(), который вернёт итератор, указывающий на перую ячейку за последним элементом вектора, т.е. *(vector.end() - 1) - значение последнего элемента (и некорректный вызов в случае если вектор пустой) для полного прохода вектора удобно использовать стандартный алгоритм std::for_each
|
|
|
RE: нужно объявить список - 2008-12-12 17:36:13.666666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
std::vector< int > v;
int n = v.size();
|
|
|
RE: нужно объявить список - 2008-12-12 17:37:32.243333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
http://msdn.microsoft.com/en-us/library/k449z507(VS.80).aspx
|
|
|
RE: нужно объявить список - 2008-12-12 17:44:50.950000
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
о,отлично, становится все более понятно))) напишу вечером,когда попытаюсь дописать задачу и у меня по-любому что-нибудь не получится)
|
|
|
RE: нужно объявить список - 2008-12-12 17:51:26.050000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: _SaZ_
std::vector< int > v;
int n = v.size();
vector<int>::size_type n = v.size() так корректней, не находишь? ;) впрочем, в большинстве случаев там будет тип size_t
|
|
|
RE: нужно объявить список - 2008-12-12 18:28:16.970000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Да, так корректней.
|
|
|
RE: нужно объявить список - 2008-12-12 23:18:34.370000
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
у меня все какие-то траблы с выводом списка(( quote:
#include <iostream> #include <vector> #include <algorithm> #include <iterator> template <typename T> class print_vector { public: void operator()(const std::vector<T>& v) { std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, " ")); std::cout<< " " << std::endl; } }; template <typename T> std::ostream & operator<<(std::ostream & os, std::vector< std::vector<T> > & vec) { typename std::vector< std::vector<T> >::iterator beg = vec.begin(); typename std::vector< std::vector<T> >::iterator end = vec.end(); std::for_each(beg, end, print_vector<T>()); return os; } я так понимаю,это вставляется в начало программы,Т так и остается,т.к в нем хранится тип передаваемого параметра,а вызывать элемент списка можно стандартно cout << spisok[1][1]? или нужна еще какая-то непосредственная связь spisk-a с обработкой вывода?
|
|
|
RE: нужно объявить список - 2008-12-12 23:26:59.860000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress я так понимаю,это вставляется в начало программы,Т так и остается,т.к в нем хранится тип передаваемого параметра,а вызывать элемент списка можно стандартно cout << spisok[1][1]? или нужна еще какая-то непосредственная связь spisk-a с обработкой вывода? забей на T, его область видимости в обоих случаях очень ограничена (в первом случае - классом print_vector, во втором - оператором <<); нужна вся эта бодяга для того, чтобы можно было сделать std::cout << spisok, т.е. весь список отправить на вывод вместо того чтобы выводить его поэлементно в цикле если ты хочешь вывести какой-то один элемент, то по-прежнему можешь воспользоваться std::cout << spisok[1][2], аналогично если ты хочешь вывести какую-то одну строку списка, ты можешь использовать print_vector: print_vector<int> printer; printer(spisok[1]); например как-то так
|
|
|
RE: нужно объявить список - 2008-12-12 23:30:10.313333
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
я наверное туплю? #include <vector> #include <ostream.h> #include <fstream.h> #include <algorithm> #include <iterator> template <typename T> class print_vector { public: void operator()(const std::vector<T>& v) { std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, " ")); std::cout<< " " << std::endl; } }; template <typename T> std::ostream & operator<<(std::ostream & os, std::vector< std::vector<T> > & vec) { typename std::vector< std::vector<T> >::iterator beg = vec.begin(); typename std::vector< std::vector<T> >::iterator end = vec.end(); std::for_each(beg, end, print_vector<T>()); return os; } struct point { int x; int y; }; int main() { std::vector<std::vector<int> > spisok; point first,second; ifstream in_file("in.txt") ; ofstream out_file("out.txt"); int pos1, pos2, numRoads, numPer; in_file >> numRoads >> numPer; point *arr=new point[numPer]; spisok.resize(numPer); for (int i=0; i<numRoads; i++){ in_file >> first.x>> first.y>> second.x>> second.y>> pos1>> pos2; arr[pos1]=first; arr[pos2]=second; spisok[pos1].push_back(pos2); spisok[pos2].push_back(pos1); } cout << spisok[1][1]; system("pause"); return 0; }
|
|
|
RE: нужно объявить список - 2008-12-12 23:57:14.246666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress я наверное туплю? зависит от того, чего ты ожидала получить quote:
ORIGINAL: enchantress template <typename T> class print_vector здесь пустая строка ни к чему quote:
ORIGINAL: enchantress cout << spisok[1][1]; а здесь ты, вероятно, хотела вывести весь список? это делается так: std::cout << spisok; безо всяких индексов
|
|
|
RE: нужно объявить список - 2008-12-13 00:02:18.013333
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
хотела первый элемент первой строки, std::cout << spisok; - тут ошибку пишет,т.к cout не относится к 'std'
|
|
|
RE: нужно объявить список - 2008-12-13 00:29:12.383333
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: enchantress std::cout << spisok; - тут ошибку пишет,т.к cout не относится к 'std' #include <vector> #include <iostream> #include <fstream> #include <algorithm> #include <iterator> а если так?
|
|
|
RE: нужно объявить список - 2008-12-13 00:31:36.103333
|
|
|
enchantress
Сообщений: 24
Оценки: 0
Присоединился: 2008-12-12 00:03:17.280000
|
а так 6 ошибок
|
|
|
|
|