c ++ uint, без знака int, int - PullRequest
       42

c ++ uint, без знака int, int

24 голосов
/ 24 августа 2010

Привет, у меня есть программа, которая имеет дело с векторами и индексами элементов этих векторов, и мне было интересно:

  1. есть ли разница между uint и unsigned int
  2. , который лучше использовать один из вышеперечисленных типов или просто использовать int, как я читал. Некоторые люди говорят, что компилятор обрабатывает значения int более эффективно, но если я использовал int, мне придется всегда проверять наличие отрицательных idx, которые это боль.
  3. Как вы думаете, итераторы лучше? это более эффективно, чем обычное индексирование vectorx[idx]?

p.s программное обеспечение будет обрабатывать большие объемы данных, а для хорошей производительности необходимо наличие требования

Ответы [ 4 ]

34 голосов
/ 24 августа 2010
  1. C ++ не определяет такой тип, как uint.Это должен быть «ваш» тип, то есть тип, определенный в вашем коде или какой-либо сторонней библиотеке.Можно догадаться, что это то же самое, что и unsigned int.Может быть unsigned long int или что-то еще.В любом случае, вы должны проверить это сами.

  2. Это вопрос личного стиля.Я, например, считаю, что нужно использовать беззнаковые типы для представления неотрицательных значений, таких как размеры или количества.Нет никакой разницы в производительности между типами со знаком и без знака, за исключением некоторых конкретных контекстов.Я бы сказал, что в большинстве случаев это беззнаковых типов, которые будут обрабатываться более эффективно.

  3. Итераторы делают реализации более общими, т.е. вы можете использовать итератор с последовательным доступоми, следовательно, сделать вашу реализацию применимой к любой последовательной структуре данных.Используя индекс, вы налагаете требование произвольного доступа на структуру данных, что является строгим требованием.Не стоит навязывать строгие требования, когда в них нет реальной необходимости.

3 голосов
/ 24 августа 2010

Если вы последовательно просматриваете вектор, используйте итератор.С индексацией связаны издержки, независимо от типа индекса, которых можно избежать путем итерации.

1 голос
/ 24 августа 2010

1) uint = unsigned int, фактически uint - это просто typedef для unsigned int (будет заменено unsigned int во время компиляции).

2) Если вы хотите добавить в свой код некоторую «безопасность», связанную с uint, вы наверняка избежите отрицательных значений.

3) Если вы пробегаете вектор последовательно, переходите к итераторам, они оптимизированы для последовательного зацикливания (они являются своего рода указателями).

0 голосов
/ 06 октября 2016

Как заметил другой автор, uint, вероятно, является typedef для unsigned int. Если вы используете Visual Studio , вы можете очень быстро проверить этот факт, нажав F12, когда текстовый курсорв uint чтобы увидеть его определение.

...