Id юзера не является тут первичным ключем поэтому ничегон не мешает иметь много оценок по каждому из них. При необходимости можно добавить и айди предмета.
1. Хм посмотрел апи, и правда возможности указать позицию у метода нет. Печально, с другой стороны это же ms - никогда они не славились хорошими АПИ. Если бы вы использовали boost то там есть вполне адекватный find + is_any_of
3. Мне кажется что решать задачу нужно тем методом которым вы владеете, если вы только не ставите себе целью разобраться с чем-нибудь еще. И раз вы задали вопрос в котором признались, что не можете этого сделать и поэтому думаете о регулярках, я посчитал что вам действительно нужно подсказать возможный алгоритм.
>Но вам не кажется ли что объём и время потраченные на данный алгоритм будут гораздо больше чем на составление шаблона регулярного выражения.
Для спеца по regexp быстрее их использовать, для человека который привык писать обычный код думаю будет быстрее написать обычный код.
Безопаснее? Подозреваю что вы неправильно поняли мой комментарий. Еще раз, в коде класса используются неконстантные operator+ - *
Это приведет к тому, что можно написать код
Matrix a, b;
a+b; // заметьте - знака = в этом коде нет
после этого кода - значение переменной "a" изменилось. Для любого человека читающего этот код - будет совершенно необычно такое изменение значения переменной, поэтому данный интерфейс плохой. Чтобы сделать его лучше нужно или
1. Сделать эти операторы константыми и всегда возвращать новый объект
2. Заменить их на += -= *= что даст понять любому читающего код что в реальности произойдет.
3. Совместить 1 и 2 - сделать внутри класса операторы += -= *= и вынести за пределы класса методы которые на их основе реализуют глобальные операторы + - =
Matrix& operator+(Matrix &b)
Лучше везде в подобных операторах использовать += *= и тд.
Если же оставить как есть, то можно будет писть код
a+b; который будет менять значение переменной a - что согласитесь нелогично.
Теперь разберитесь с отладчиком, он здорово упростит вам жизнь.
Как альтернативный вариант отладки - можно выводить куда-то каждый этап работы алгоритма, тогда вам станет ясно на каком этапе происходит ошибка.
в си++.11 появился std::thread который реализует кросс-платформенную многопоточность. Еще можно почитать про boost.thread. Для написания потоков на голом си - существуют posix thread ( для никсов ) и их свободный порт под виндовс платформу.
>код сервера работающий с сокетами у вас под эти две платформы будет различаться на 90%
Да вроде обычные berkeley-sockets имеют одинаковый апи как для Винды так и для Линукса. Такчто даже работая с голыми сокетами программа будет очень переносимой. Сюда же добавить потоки из стандартной библиотеки, и сервер без больших усилий можно сделать кроссплатформенным.
Насчет того что вы сказали про системы сборок - многие открытые проекты используют сразу несколько систем - для линукса создают make/cmake файлы, а для винды пользуются обыным проектом студии.
В вашей ситуации, когда код написан но не работает нужно либо отлаживать дебаггером, либо выводить отладочную информацию в консоль - ну и разбираться в каком месте возникает ошибка. У меня не раз случалось например что при правильном алгоритме неправильно работала финальная функция вывода значения на экран, отчего казалось будто алгоритм сломан.
Если вы будете выводить значения массивов и переменных после каждого действия алгоритма - так так вы сможете при каждом запуске быстро проверить где, в каком месте что-то пошло не так, а в таких делах - понять где - 90% успеха.
Crunchbang уже пару лет как перешел на Debian. Я именно его ставлю на старые ноуты для браузинга и скайпа, единственное предвратиельно меняю openbox на xfce. Работает успешно на ноуте с 256 оперативки уже пару лет.
А если там игровая логика и куча вычислений? Тогда выбор С++ оправдан.
Кроме того удобно когда вычисления логики игры на клиенте и на сервере работают одинаково, и нет необходимости все переписывать на другом ЯП.
Когда вышел Qt4 компания где я работал писала сервер на Qt4.
Найденные проблемы
— QTcpServer насколько я помню работал поверх обычного select — следовательно был ограничен 64 сокетами ( клевый будет сервер который одновременно может не больше 64 коннектов держать да? )
— У многих базовых классов не было реализовано обработки ошибок ( в частности QString при нехватке памяти просто не делал ничего ). Как ответили нам на форуме разработчиков — «Если закончится память то у клиента даже мышка двигаться перестанет» — следовательно кому какое дело до нашего приложения. Узнав что пишем мы сервер там только разводили руками.
Вывод — qt тогда точно не был предназначен для серверов. Сейчас — имхо это тоже не профильный инструмент.
stl и шаблоны когда человек только хочет начать учить язык? Вы шутите? Имхо взять какое-то плавное введение, и без всяких хитрых умных классов изучать возможности языка. Согласен с вами, что написание чего-то конкретного в этом может помочь.
Из книг я бы порекомендовал «Брюс Эккель — Философия C++. Введение в стандартный С++» Оригинал на английском доступный для скачивания
Да SSL спасает от атаки «человек посередине». Варианты когда он не спасает — запрет ssl трафика, и клиенты соединяются по незащищенному каналу, попытки подменить сертификат — тут по идее клиент должен среагировать, но некоторые могут это игнорировать, ну и наконец — генерация валидного сертификата для данного сервера. Последний вариант единственно надежный, однако насколько я понимаю все упирается в доверие, простите за тавтологию, Центрам Доверия
_____________
1|23|4
2|12|5
1|56|5
Id юзера не является тут первичным ключем поэтому ничегон не мешает иметь много оценок по каждому из них. При необходимости можно добавить и айди предмета.