$res = array(
0=>array("id"=>9, "roi"=>0),
1=>array("id"=>1,"roi"=>0),
2=>array("id"=>10,"roi"=>0),
3=>array("id"=>14,"roi"=>0),
4=>array("id"=>4,"roi"=>0),
5=>array("id"=>5,"roi"=>141),
6=>array("id"=>6,"roi"=>2600));
$res4 = array();
$count = count($res);
for($i=$count-1;$i>=0;$i--){
$res4[$i] =$res[$i];
}
print_r($res4);
Сам язык является межплатформенным, но большинство библиотек не, но существует три вещи, которые необходимо иметь в виду, хотите ли Вы пойти абсолютно межплатформенные при программировании в C++.
Во-первых, необходимо начать использовать некоторую межплатформенную систему сборки, как SCons. Во-вторых, необходимо удостовериться, что все библиотеки, которыми Вы пользуетесь, создаются, чтобы быть межплатформенными. И незначительная третья точка, я рекомендовал бы использовать компилятор, который существует на всех Ваших целевых платформах, , gcc прибывает в памяти сюда (C++ является довольно сложным зверем, и все компиляторы имеют свои собственные определенные причуды).
у меня есть некоторые дальнейшие предложения относительно графических интерфейсов пользователя для Вас. Существует несколько из них доступных использованию, самые известные три:
GTK + и QT являются два API, которые идут с их собственными комплектами программ системного обеспечения (кнопки, списки, и т.д.), пока wxWidgets является большим количеством обертки API к собственному комплекту программ системного обеспечения в настоящее время платформ запуска. Это означает, что прежние два могли бы посмотреть немного по-другому по сравнению с остальной частью системы, пока последний посмотрит точно так же, как собственная программа.
И если Вы в игры, программирующие, существуют одинаково многие API для выбора из, все они межплатформенные также. Два, самые полнофункциональные, о котором я знаю:
, Оба из которых содержит все от графики для ввода и аудио стандартные программы, или через плагины или встроенный.
кроме того, если Вы чувствуете, что стандартной библиотеке в C++ немного недостает, проверьте Повышение для некоторой межплатформенной сладости общего назначения.
Удачи.
C++ является кросс-платформенным. Проблема, которую Вы, кажется, имеете, состоит в том, что Вы пользуетесь зависимыми библиотеками платформы.
я предполагаю, что Вы действительно говорите о UI componenets-, в этом случае, я предлагаю использовать что-то как GTK +, QT или wxWindows-, каждый из которых имеют компоненты UI, которые могут быть скомпилированы для различных систем.
единственное решение состоит в том, чтобы Вы нашли и пользовались независимыми от платформы библиотеками.
И, на ноте стороны, ни один cygwin или Вино являются эмуляцией - они - 100%-е собственные реализации той же функциональности, найденной их соответствующими системами.
После того как Вы знаете о глюках, это на самом деле не настолько трудно. Весь код я в настоящее время работаю над компиляциями на 32 и 64-разрядный Windows, все разновидности Linux, а также Unix (Sun, HP и IBM). Очевидно, это не продукты GUI. Кроме того, мы не пользуемся сторонними библиотеками, если мы не компилируем их сами.
у меня есть один.h файл, который содержит весь определенный для компилятора код. Например, Microsoft и gcc не соглашаются относительно того, как указать 8-разрядное целое число. Таким образом в.h, я имею
#if defined(_MSC_VER)
typedef __int8 int8_t;
#elif defined(__unix)
typedef char int8_t;
#endif
существует также довольно мало кода, который униформизирует определенные вызовы функции низшего уровня, например:
#if defined(_MSC_VER)
#define SplitPath(Path__,Drive__,Name__,Ext__) _splitpath(Path__,Drive__,Dir__,Name__,Ext__)
#elif defined(__unix)
#define SplitPath(Path__,Drive__,Name__,Ext__) UnixSplitPath(Path__,Drive__,Name__,Ext__)
#endif
Теперь в этом случае, я полагаю, что должен был записать UnixSplitPath () функция - будут времена, когда Вы должны будете. Но большую часть времени, просто необходимо найти корректную заменяющую функцию. В моем коде я назову SplitPath (), даже при том, что это не собственная функция ни на одной платформе; #defines уладит его для меня. Это требует времени для обучения себя.
, Хотите верьте, хотите нет, мой.h файл является только 240 строками долго. Существует действительно не очень к нему. И это включает проблемы порядка байтов обработки.
Части материала низшего уровня будет нужна условная компиляция. Например, в Windows, я использую Критические Разделы, но в Linux я должен использовать pthread_mutex. CriticalSection инкапсулировались в классе, и этот класс имеет большую условную компиляцию. Однако программа верхнего уровня полностью не знает, класс функционирует точно то же независимо от платформы.
другой секрет я могу дать Вам: разработайте свой проект на всех платформах часто (особенно вначале). Намного легче, когда Вы пресекаете проблемы компилятора в корне. Не ожидайте, пока Вы не сделанная разработка, прежде чем Вы попытаетесь пойти межплатформенные.
Придерживайтесь ANSI C++ и библиотеки, которые являются межплатформенными, и необходимо быть в порядке.
Создайте некоторый слой низкого уровня, который будет содержать весь определенный для платформы код в Вашем проекте. Реализуйте 2 версии этого слоя - один для Windows, и один для Linux - с тем же интерфейсом, и создайте их к 2 библиотекам. Доступ вся определенная для платформы функциональность в Вашем проекте через тот интерфейс.
Этот слой может содержать общие классы для доступа к файлу, печати, GUI, и т.д.
Весь (теперь non-platform-specific), код, который использует тот слой, может теперь быть скомпилирован однажды в Windows и однажды в Linux.
Скомпилируйте его в Окне и снова в Linux. Если Вы не использовали платформу определенные библиотеки, она должна работать. Это не похоже на Java, где Вы компилируете его однажды, и это работает везде. Никто не сделал виртуальную машину для C++, и вероятно никогда не будет. Код, который Вы пишете в C++, будет работать в любой платформе. Просто необходимо скомпилировать его в каждой платформе сначала.
Предложения:
определение типа Использования для ints. Или #include < stdint.h>. некоторые машины думают, что интервал составляет 8 байтов, приблизительно 4. (Это раньше было 2 и 4. Как времена изменились.)
инкапсуляция Использования по мере возможности. Компилятор моего последнего окна думал, что %lld был %I64d", дали странные возвращаемые значения для vsnprintf (), подобные проблемы с завершением () и сокеты, и т.д.
Не упускают размер стека / пределы размера буфера. Я столкнулся с 8k ограничением буфера UDP в соответствии с Windows среди других проблем.
По некоторым причинам, компилятор C++ моего Окна не принял бы динамически измеренные выделения от стека. Например: пустое нечто (интервал a) {интервал b;} знать о подобных вещах. Запланируйте, как Вы повторно кодируете.
#ifdef может быть Вашим лучшим другом. И Ваш худший враг! (В то же время!)
Это может, конечно, быть сделано. Но скомпилируйте и протестируйте рано и часто!
Также Linux и Windows имеют другую модель данных. Статья See: проблемы, о которых забывают, 64-разрядной разработки программ
Стандарт C++ является компиляциями кода без ошибок на любой платформе. Попытайтесь использовать Кровопролитие Dev C++ на окнах (вместо VC ++ / Borland C++).
Как Кровопролитие Dev C++ подтверждает стандарты C++, таким образом, программы скомпилировали использование, это будет скомпилировано на Linux без ошибок в большинстве случаев.