STL, сокращающий массив, c ++ - PullRequest
1 голос
/ 16 июля 2010

Для назначения hw мы должны закодировать процедуру сокращения, которая выглядит следующим образом:

int reduce(long array[], int size) 
//Where array is the array to reduce, and size is the size of the array.

Использование STL. Сначала я хотел создать набор, сопоставить все элементы набора, но потом я понял, что созданный набор никогда не будет пригоден для использования, поскольку функция возвращает размер нового набора, а не сам набор в использоваться. Так что я не уверен, как бы я использовал STL для уменьшения массива. Какие-нибудь мысли? Спасибо.

Отредактировано: Извините, Reduce - это просто сокращение массива в отсортированный массив без дубликатов.

E.g. {4, 4, 2, 1} -> {1, 2, 4}

Ответы [ 2 ]

8 голосов
/ 16 июля 2010

Сортируйте массив, используя std :: sort, затем примените к нему std :: unique, чтобы удалить дубликаты. std :: unique работает только на отсортированных массивах. Просто для упрощения дела вот как вы получаете begin и end собственного массива:

long* begin = array;
long* end   = array + size;

Если у вас есть эти две вещи, вы можете легко применять стандартные алгоритмы. Также, если вам нужно вернуть новый размер (используемые элементы в массиве):

long* end_after_unique = unique(...);
return end_after_unique - array;
0 голосов
/ 16 июля 2010

std :: map разрешает только одну запись и сортирует элементы автоматически.«Второе» значение в вашем случае не имеет значения.

std::map<INT32,INT32> mymap;
mymap[i] = array[i];//inserts if not already present
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...