Russian Qt Forum
Ноябрь 23, 2024, 08:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: std::sort  (Прочитано 7612 раз)
RuZ
Гость
« : Май 12, 2009, 19:44 »

Цель задания вывести все возможные комбинации, которые можно составить из заданных букв.
В Borland C++Builder код работает отлично, а в QT Creator 1.1.0 вылетает с ошибкой (exited with code -1073741819)
вероятнее всего проблемы с выделением памяти.
В чём может быть дело?
Код:
#include <string.h>
#include <algorithm>
#include <conio.h>
#include <iostream.h>
int main(int argc, char* argv[])
{
int i=0;
char* strings=new char[200];
strings="bcdse";
int numStrings=strlen(strings);
std::sort(&strings[0], &strings[numStrings]);
do {
cout<<strings;
cout<<endl;
i++;
  } while ( std::next_permutation (&strings[0], &strings[numStrings])); 
cout<<i;
getch();
return 0;
}
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Май 12, 2009, 19:56 »

эм
Код:
template<class RandomAccessIterator>
   void sort(
      RandomAccessIterator _First,
      RandomAccessIterator _Last
   );
Я чего-то не понимаю, или нужно передавать итераторы а не указатель на чары?
Записан
Rcus
Гость
« Ответ #2 : Май 12, 2009, 20:47 »

BCC пропускает это?
GCC сразу ругается на конверсию const char * в char *.
А проблема в непонимании указателей (strings="bcdse"; -> Segmentation fault)
Записан
RuZ
Гость
« Ответ #3 : Май 12, 2009, 20:58 »

QT Creator, а значит и gcc ни на что не ругается, а просто программа уже потом вылетает с ошибкой.
Можете сказать что нужно сделать, что бы код заработал нормально? Если можно напишите верный алгоритм.
Записан
Rcus
Гость
« Ответ #4 : Май 12, 2009, 21:06 »

deprecated conversion from string constant to ‘char*’ (gcc 4.3.3)

Проще всего конечно не смешивать C и C++. Если уж пишете с использованием std, то к вашим услугам есть std::string.
А наименьшие изменения, которые заставят код работать это замена strings="bcdse"; на strcpy(strings,"bcdse");
Записан
RuZ
Гость
« Ответ #5 : Май 12, 2009, 21:20 »

Спасибо, всё работает, какой-то баг в QTCreator.
А какой бы другой способ рашения данной задачи предложили бы вы?
Записан
sermp
Гость
« Ответ #6 : Май 12, 2009, 21:34 »

если я не ошибаюсь, Вы забыли
Код:
delete [] strings;
в конце

а кто-нибудь может объяснить почему работает
Код:
std::sort(&strings[0], &strings[numStrings]);
т.е. во что преобразуется char?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #7 : Май 12, 2009, 21:53 »

подумав, решил, что в принципе ни во что не преобразовывается, так как для чара определены ++ и операции сравнения/присваивания - то есть классу, чтобы быть итератором, не нужно специфических полей/методов
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Май 13, 2009, 12:02 »

Спасибо, всё работает, какой-то баг в QTCreator.

QtCreator здесь непричем.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.