Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите понять, что не так 
V
    Опции темы
newbie2009
Дата 25.12.2010, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



Иммею я ф-ию:
Код


QVector<int *>  neighborhood;
......

void TabuSearch::create_neighborhood()
{
    int k = 0;
    int i,j;

    neighborhood.clear();

    int* tmp_p = new int[N];
    copy(permutation,tmp_p);

    while( k < size_neighborhood )
    {
        if( ran01( &seed ) > 0.8 )
        {
            do
            {
                i = unif(0,N-1);
                j = unif(0,N-1);
            } while ( i == j );
            transpose(tmp_p[i],tmp_p[j]); 

            neighborhood << tmp_p;

            printf("in func: ");
            printPermutation(tmp_p);
        }
        k++;
    }
}


Далее где-то я вызываю эту ф-ию и хочу вывести на экран содержимое neighborhood:
    
Код

create_neighborhood();   
    
    for(int i = 0; i < neighborhood.size();i++)
        printPermutation(neighborhood[i]);


И в результате получаю, что вроде как в neighborhood хранятся одинаковые значения. Почему так получается то?

Это сообщение отредактировал(а) newbie2009 - 25.12.2010, 19:54
PM MAIL   Вверх
borisbn
Дата 26.12.2010, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(newbie2009 @  25.12.2010,  19:35 Найти цитируемый пост)
Почему так получается то?

Потому, что ты кладёшь туда одно и то же:

1.
Цитата(newbie2009 @  25.12.2010,  19:35 Найти цитируемый пост)
int* tmp_p = new int[N];

2.
Цитата(newbie2009 @  25.12.2010,  19:35 Найти цитируемый пост)
 neighborhood << tmp_p;


1-е это присвоение указателю значения
2-е это помещение этого указателя в вектор.
Между ними этот указатель нигде не изменяется, поэтому ты хоть стопятьсот раз положи tmp_p в neighborhood, в последнем пудет храниться стопятьсот копий этого tmp_p.

Лучше сформулируй, что нужно сделать, а не как исправить ошибки в коде, возможно неправильном изначально



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
newbie2009
Дата 26.12.2010, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



Спасибо, за ответ.

Да, это я уже понял сегодня с утра, когда пошел спать)))

А надо сделать, у меня есть какие-то перестановки, и я их хочу хранить в векторе ( вектор этот собственно образует так называемую окрестность )...
Я вообщем то сделал потом так, в конце перед началом новой итерации я заново выделял память для tmp_p.
Но это я понимаю не сильно хорошо так делать?

Получилось вот так:
Код

void TabuSearch::create_neighborhood()
{
    int k = 0;
    int i,j;

    neighborhood.clear();

    int* tmp_p = new int[N];
    copy(permutation,tmp_p);

    while( k < size_neighborhood )
    {
        if( ran01( &seed ) > 0.2 )
        {
            do
            {
                do
                {
                    i = unif(0,N-1);
                    j = unif(0,N-1);
                } while ( i == j );
                transpose(tmp_p[i],tmp_p[j]);

                neighborhood << tmp_p;
            } while ( !neighborhood.contains(tmp_p) );


//            printf("in func: ");
//            printPermutation(tmp_p);

            tmp_p = new int[N];
            copy(permutation,tmp_p);
        }
        k++;
    }
}

PM MAIL   Вверх
borisbn
Дата 26.12.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(newbie2009 @  26.12.2010,  10:48 Найти цитируемый пост)
while ( !neighborhood.contains(tmp_p) );

вообще бессмысленно, т.к. neighborhood не будет в принципе содержать один и тот же указатель.
Подумай внимательно, что должен содержать этот neighborhood? Точно указатели на динамически выделенные массивы ?
Если поподробнее расскажешь, что должна делать ф-ция create_neighborhood, то м.б. тебе подскажут как это сделать...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
newbie2009
Дата 29.12.2010, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 8.2.2009

Репутация: нет
Всего: нет



Уже исправил все, спасибо за помощь...
Забыл поставить как решенную проблему!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.