С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
#1

С массив для STL - C++

17.12.2013, 08:05. Просмотров 754. Ответов 20
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
 
using namespace std;
 
int main()
{
    const int n = 100;
    int a[n][n] = {0};
    vector<int> v(n * n);
    copy(a, a + n * n, v.begin());
    cout << (count_if(v.begin(), v.end(), bind1st(equal_to<int>(), 0)) == v.size() ? "YES" : "NO") << endl;
    
    return 0;
}
Это один пример из многих. В сущности не знаю как создать итератор на начало и конец массива, что-бы функции из STL хавали это без ошибок. В идеале надо просто создать 2 итератора без вектора, это я пытался костыли поставить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2013, 08:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С массив для STL (C++):

STL: Создать массив длины N. Заполнить массив рандом. Найти все различные числа массива - C++
Создать массив длины N (число N вводится с клавиатуры). Заполнить массив случайными целыми числам. Найти все различные числа массива. Для...

Stl vector как массив - C++
Есть функция принимающая указатель на массив и его длину и копирующая его в другой массив определенный указателем. void SetMass(float...

stl vector или ограниченный массив - C++
Скажите пожалуйста целесообразно ли использовать вектор структур с весом 100 байт и размером вектора не больше 10, а так же использовать...

STL сформировать массив множеств слов - C++
Создать и протестировать функцию void parse String (const string &amp; src, vector &amp; dst), которая сформирует массив множеств строк dst из...

STL(map). Где инициализировать массив? - C++
Для начала: не получалось данную тему назвать более логично, сайт не пропускал :-| Добрый день. Имеется: map&lt;int, string&gt;...

Используя STL контейнер set заполнить массив - C++
Задание 2. Данную задачу решить не используя метод sort, а используя STL контейнер: set. Заполнить массив размером 10 случайными числами от...

20
0x10
2486 / 1661 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
17.12.2013, 08:31 #2
Решение в лоб.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
 
int main()
{
    const int n = 100;
    int a[n][n] = {0};
    std::cout <<
        (std::count_if(&a[0][0], &a[0][0] + n * n,
            std::bind(std::equal_to<int>(), 0, std::placeholders::_1)) == n * n
                ? "YES"
                : "NO")
        << std::endl;
 
    return 0;
}
1
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
17.12.2013, 18:03  [ТС] #3
Тема закрыта, ошибку нашел.

Добавлено через 9 часов 19 минут
Еще такой вопрос: допустим есть массив:
C++
1
2
const int
int a[100500];
какая разница между следующими вызовами
C++
1
2
std::count(a, a + n, 0);
std::count(std::begin(a), std::end(a), 0);
и какой из них предпочтительней, и почему?

P.S. меня интересует метод передачи диапазона, конкретная функция не интересует.
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
26.12.2013, 21:48 #4
Цитата Сообщение от outoftime Посмотреть сообщение
std::count(a, a + n, 0);
Думаю, эта. Она понятнее.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class _Ty,
    size_t _Size> inline
    _Ty *begin(_Ty (&_Array)[_Size])
    {   // get beginning of array
    return (_Array);
    }
 
template<class _Ty,
    size_t _Size> inline
    _Ty *end(_Ty (&_Array)[_Size])
    {   // get end of array
    return (_Array + _Size);
    }
1
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
26.12.2013, 22:05  [ТС] #5
Qwertiy, т.е. оно делает тоже (:
0
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
26.12.2013, 22:28 #6
Цитата Сообщение от outoftime Посмотреть сообщение
и какой из них предпочтительней, и почему?
Второй вариант универсальней, т.к. будет работать с любым типом контейнра.
1
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
26.12.2013, 22:29  [ТС] #7
ТЕМА ЗАКРЫТА
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
26.12.2013, 22:47 #8
Цитата Сообщение от rangerx Посмотреть сообщение
Второй вариант универсальней, т.к. будет работать с любым типом контейнра.
Неправда.
Да, он будет работать со стандартными stl-контейнерами.
И он работает с массивами фиксипрованной длины (как раз та перегрузка, которую я привёл).
Но он не будет работать с динамическими массивами:
int *a = new int[128];
0
Neznayka14
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 5
26.12.2013, 22:59 #9
Цитата Сообщение от outoftime Посмотреть сообщение
ТЕМА ЗАКРЫТА
Извини... Ты не мог бы посмотреть мою тему? Проверить мой код если можно?
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
26.12.2013, 23:12  [ТС] #10
Qwertiy, это понятно с шаблона
0
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
26.12.2013, 23:19 #11
Qwertiy, а не контейнер/массив, это указатель, естественно с указателем это работать не будет.
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
26.12.2013, 23:41 #12
Цитата Сообщение от outoftime Посмотреть сообщение
это понятно с шаблона
Там ещё перегруженный вариант для контейнеров.

Цитата Сообщение от rangerx Посмотреть сообщение
а не контейнер/массив, это указатель, естественно с указателем это работать не будет.
Это понятно. Я про универсальность. Есть массив фиксированной длины. Если использовать вариант с указателями, то при замене массива на динамический код продолжит работать, а при замене на вектор - перестанет. Если использовать вариант с std::begin и std::end, то при переходе на вектор ничего менять не придётся, а вот с динамическим массивом ничего не выйдет.
1
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
27.12.2013, 01:36  [ТС] #13
Цитата Сообщение от Qwertiy Посмотреть сообщение
Я про универсальность. Есть массив фиксированной длины. Если использовать вариант с указателями, то при замене массива на динамический код продолжит работать, а при замене на вектор - перестанет. Если использовать вариант с std::begin и std::end, то при переходе на вектор ничего менять не придётся, а вот с динамическим массивом ничего не выйдет.
Интересная точка зрения.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.12.2013, 12:10 #14
Qwertiy, Учитывая, что динамические массивы в С++ зло во плоти (в основном), ведь есть же вектор, а статические массивы заменяются на std::array, который куда удобнее, выбор std::begin/std::end очевиден.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.12.2013, 13:21 #15
Цитата Сообщение от ForEveR Посмотреть сообщение
а статические массивы заменяются на std::array
Вот когда можно будет явно не указывать размер, например в этом случае:
C++
1
std::array<int,3> a = {1,2,3};
то сишный статические массивы можно будет забыть. Ну и make_array() еще бы добавить.
0
27.12.2013, 13:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2013, 13:21
Привет! Вот еще темы с ответами:

Сформировать массив из двух других одномерных массивов STL - C++
Алгоритмы стандартной библиотеки шаблонов STL Даны два одномерных массива, состоящие из N (N&gt;5) целых чисел из диапазона . Сформировать...

Сортировка для Stl - C++
Коротышки провели психологическое тестирование &lt;&lt;Узнай себя&gt;&gt;.Запись о результатах записали в файл, в виде кто какие качества имеет ( в...

STL для новичка! - C++
Здравствуйте! подскажите пожалуйста мне, дураку(только начал изучать STL) ответ на такой вопрос! что нужно подставить в 19 строку? ...

STL Заполнить массив размером 10 случайными числами от 0 до 10, отсортировать его по убыванию и вывести - C++
Заполнить массив размером 10 случайными числами от 0 до 10, отсортировать его по убыванию и вывести в выходной поток. Добавлено через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.