Справка рекомендует спокойный [закрытый] проект с открытым исходным кодом

Используя массивы C++ с new (то есть, с помощью динамических массивов) должен избежаться. Существует проблема, которую необходимо отслеживать размер, и Вы должны удалить их вручную и действительно все сортируете обслуживания.

Используя массивы на стеке также препятствуется, потому что у Вас нет проверки диапазона, и раздавание массива потеряет любую информацию о своем размере (массив к преобразованию указателя). Необходимо использовать boost::array в этом случае, который обертывает массив C++ в маленький класс и обеспечивает size функция и итераторы для итерации по ней.

Теперь станд.:: вектор по сравнению с собственными массивами C++ (взятый из Интернета):

// Comparison of assembly code generated for basic indexing, dereferencing, 
// and increment operations on vectors and arrays/pointers.

// Assembly code was generated by gcc 4.1.0 invoked with  g++ -O3 -S  on a 
// x86_64-suse-linux machine.

#include <vector>

struct S
{
  int padding;

  std::vector<int> v;
  int * p;
  std::vector<int>::iterator i;
};

int pointer_index (S & s) { return s.p[3]; }
  // movq    32(%rdi), %rax
  // movl    12(%rax), %eax
  // ret

int vector_index (S & s) { return s.v[3]; }
  // movq    8(%rdi), %rax
  // movl    12(%rax), %eax
  // ret

// Conclusion: Indexing a vector is the same damn thing as indexing a pointer.

int pointer_deref (S & s) { return *s.p; }
  // movq    32(%rdi), %rax
  // movl    (%rax), %eax
  // ret

int iterator_deref (S & s) { return *s.i; }
  // movq    40(%rdi), %rax
  // movl    (%rax), %eax
  // ret

// Conclusion: Dereferencing a vector iterator is the same damn thing 
// as dereferencing a pointer.

void pointer_increment (S & s) { ++s.p; }
  // addq    $4, 32(%rdi)
  // ret

void iterator_increment (S & s) { ++s.i; }
  // addq    $4, 40(%rdi)
  // ret

// Conclusion: Incrementing a vector iterator is the same damn thing as 
// incrementing a pointer.

Примечание: Если Вы выделяете массивы с new и выделяете необъекты класса (как плоскость int) или классы без определяемого пользователем конструктора , и Вы не хотите инициализировать свои элементы первоначально, с помощью new - выделенные массивы могут иметь преимущества производительности, потому что std::vector инициализирует все элементы к значениям по умолчанию (0 для интервала, например) на конструкции (кредиты к @bernie для запоминания меня).

5
задан GarudaReiga 16 October 2009 в 06:18
поделиться

4 ответа

Если вы работаете в Linux (но есть порты и для Win, и для Mac), вам обязательно нужно взглянуть на любое приложение KDE. Он использует библиотеки KDE, но все построено на QT, так что это хорошее начало. Тем более, что существует огромное количество доступных приложений, начиная от самой маленькой игры и заканчивая большим почтовым клиентом и заканчивая целой средой рабочего стола. Все имеет открытый исходный код, находится в свободном доступе, хорошо документировано, и вы можете связаться с большим количеством людей, которые могут помочь вам начать работу.

5
ответ дан 18 December 2019 в 08:29
поделиться

Вы можете попробовать http://www.qt-apps.org/ . Это только Qt, а не KDE.

Что касается KDE, вы можете попробовать установить его на свой Ubuntu, использовать его некоторое время, выбрать одно приложение, которое вам нравится, и посмотреть его исходный код. Затем вы можете получить это из репозитория KDE SVN, скомпилировать его, изменить, исправить ошибки, отправить исправления и т.д.

Но помните, что KDE - это не Qt. KDE использует kdelib, которые представляют собой еще один слой, построенный поверх Qt. Возможно, вас также интересует кроссплатформенный аспект: Qt отлично работает в Linux, Mac и Windows, в то время как KDE отлично работает в Linux и находится в процессе портирования на Mac и Windows. Здесь есть прогресс (вы можете получить приложения KDE для Windows здесь ), но они далеко не так совершенны, как Qt для Windows.

5
ответ дан 18 December 2019 в 08:29
поделиться

Я бы не советовал проходить через qt-apps.org или kde-apps.org. Там вы можете найти множество плохо написанных приложений.

Посмотрите на браузер Arora , если хотите чему-то научиться. Он не такой большой, а исходный код хорошо организован.

5
ответ дан 18 December 2019 в 08:29
поделиться

Для малых и средних программ Qt я рекомендую сайт www.dprog.net Это сообщество, создающее небольшие и средние программы с очень высоким качеством исходного кода Qt, идеально подходит для вас!

Надеюсь, это поможет!

4
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: