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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2010, 23:35   #1
certman
 
Регистрация: 24.03.2010
Сообщений: 3
По умолчанию Vector, Pair и segmentation fault

Здравствуйте.

Подскажите пожалуйста, как правильно обращаться к вот такой структуре:
vector <vector < pair<int,int> > > dm[i]

При попытке изменить значения пары следующим способом:

Код:
dm[i][j].first = 5;
dm[i][j].second = 3;
или

Цитата:
dm[i][j]=make_pair(5, 3);
программа сваливается в segmentation fault.
certman вне форума Ответить с цитированием
Старый 25.03.2010, 00:06   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

может они у тебя не заполнены? этож не массив у него есть методы push_back для добавления...

Код:
vector< vector< pair<int,int> > > vec;
vector<pair<int,int> > vp;
pair<int,int> p(5,3);
vp.push_back(p);
vec.push_back(vp);
vec[0][0].first << endl
vec[0][0].second << endl;
или так...

Код:
vector< vector< pair<int,int> *> > vec;
vector<pair<int,int> *> vp;
vp.push_back(new pair<int,int>);   
vec.push_back(vp);
vec[0][0]->first = 5;
vec[0][0]->second = 3;

Последний раз редактировалось NiCola999; 25.03.2010 в 00:18.
NiCola999 вне форума Ответить с цитированием
Старый 25.03.2010, 00:14   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2certman
потому что ты издеваешься над вектором, он в свою очередь издевается над тобой. как правильно сказали выше, они у тебя не заполнены. накидал тебе тут код, может ты не понимаешь, что делаешь

Код:
#include <iostream>
#include <vector>

using namespace std;

typedef pair<int, int> my_pair_type;
typedef vector<my_pair_type> my_vector_type;

//---------------------------------------------------------------
void fill(vector<my_vector_type> &vec)
{
	for (int i = 0; i < 10; ++i) {
		my_vector_type v;
		for (int j = 0; j < 10; ++j) {
			v.push_back(make_pair(1, j));
		}
		vec.push_back(v);
	}
}

//---------------------------------------------------------------
void print(vector<my_vector_type> &vec)
{
	vector<my_vector_type>::iterator Iter;
	for (Iter = vec.begin(); Iter != vec.end(); ++Iter) {
		vector<my_pair_type>::iterator pairIter;
		cout << "subvector:" << endl;
		for (pairIter = Iter->begin(); pairIter != Iter->end(); ++pairIter) {
			cout << "first = " << pairIter->first << " second = " << pairIter->second << endl;
		}
	}
}

//---------------------------------------------------------------
int main()
{
	vector<my_vector_type> m_list[10];

	fill(m_list[0]);
	print(m_list[0]);

	return 0;
}
я немного упростил твой вариант с помощью синонимов.
итак, что ты тут делаешь. создаешь массив векторов, каждый элемент которого является вектором, каждый элемент которого является парой ключ - значение. это контейнер гигантского размера, причем очень неэффективный.добавишь 10 подвекторов, в каждом по 10 элементов, добавляешь 11, и тут твой основной вектор (скажем, первый в массиве) понимает, что памяти ему не хватает на данном участке, и он реаллокает все это безобразие. и выходит трагедия.
я очень, очень очень сильно сомневаюсь, что это именно то, что ты хотел. разберись с мапом, еще лучше для твоего варианта - с мультимапом.
а если уж решил делать такую бабуйню через вектора, то храни в родительском векторе ссылки на другие вектора. типо такого:
Код:
vector<my_subvector &> list;
вобщем, тут можно писать много и долго, поэтому заканчиваю.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 25.03.2010, 00:24   #4
certman
 
Регистрация: 24.03.2010
Сообщений: 3
По умолчанию

pproger, спасибо огромное. Суть я понял, буду разбираться...
certman вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QT4 segmentation fault jojahti Qt и кроссплатформенное программирование С/С++ 6 06.01.2010 09:57
Новое сравнение pair AxenicX Общие вопросы C/C++ 2 29.11.2009 21:17
TImage в сочетании с new и std::pair Гром Общие вопросы C/C++ 6 10.10.2009 14:10
GCL и segmentation fault. jojahti Свободное общение 0 14.09.2009 19:20
Program received signal SIGSEGV, Segmentation fault. ciaonataha Общие вопросы C/C++ 53 24.04.2009 14:06