Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
17.12.2013, 08:05     С массив для STL #1
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 итератора без вектора, это я пытался костыли поставить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2013, 08:05     С массив для STL
Посмотрите здесь:

stl vector или ограниченный массив C++
метод erase для list(STL) C++
STL для новичка! C++
STL(map). Где инициализировать массив? C++
Используя STL контейнер set заполнить массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
17.12.2013, 08:31     С массив для STL #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;
}
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
17.12.2013, 18:03  [ТС]     С массив для STL #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. меня интересует метод передачи диапазона, конкретная функция не интересует.
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
26.12.2013, 21:48     С массив для STL #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);
    }
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
26.12.2013, 22:05  [ТС]     С массив для STL #5
Qwertiy, т.е. оно делает тоже (:
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
26.12.2013, 22:28     С массив для STL #6
Цитата Сообщение от outoftime Посмотреть сообщение
и какой из них предпочтительней, и почему?
Второй вариант универсальней, т.к. будет работать с любым типом контейнра.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
26.12.2013, 22:29  [ТС]     С массив для STL #7
ТЕМА ЗАКРЫТА
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
26.12.2013, 22:47     С массив для STL #8
Цитата Сообщение от rangerx Посмотреть сообщение
Второй вариант универсальней, т.к. будет работать с любым типом контейнра.
Неправда.
Да, он будет работать со стандартными stl-контейнерами.
И он работает с массивами фиксипрованной длины (как раз та перегрузка, которую я привёл).
Но он не будет работать с динамическими массивами:
int *a = new int[128];
Neznayka14
0 / 0 / 0
Регистрация: 26.12.2013
Сообщений: 5
26.12.2013, 22:59     С массив для STL #9
Цитата Сообщение от outoftime Посмотреть сообщение
ТЕМА ЗАКРЫТА
Извини... Ты не мог бы посмотреть мою тему? Проверить мой код если можно?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
26.12.2013, 23:12  [ТС]     С массив для STL #10
Qwertiy, это понятно с шаблона
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
26.12.2013, 23:19     С массив для STL #11
Qwertiy, а не контейнер/массив, это указатель, естественно с указателем это работать не будет.
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
26.12.2013, 23:41     С массив для STL #12
Цитата Сообщение от outoftime Посмотреть сообщение
это понятно с шаблона
Там ещё перегруженный вариант для контейнеров.

Цитата Сообщение от rangerx Посмотреть сообщение
а не контейнер/массив, это указатель, естественно с указателем это работать не будет.
Это понятно. Я про универсальность. Есть массив фиксированной длины. Если использовать вариант с указателями, то при замене массива на динамический код продолжит работать, а при замене на вектор - перестанет. Если использовать вариант с std::begin и std::end, то при переходе на вектор ничего менять не придётся, а вот с динамическим массивом ничего не выйдет.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
27.12.2013, 01:36  [ТС]     С массив для STL #13
Цитата Сообщение от Qwertiy Посмотреть сообщение
Я про универсальность. Есть массив фиксированной длины. Если использовать вариант с указателями, то при замене массива на динамический код продолжит работать, а при замене на вектор - перестанет. Если использовать вариант с std::begin и std::end, то при переходе на вектор ничего менять не придётся, а вот с динамическим массивом ничего не выйдет.
Интересная точка зрения.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.12.2013, 12:10     С массив для STL #14
Qwertiy, Учитывая, что динамические массивы в С++ зло во плоти (в основном), ведь есть же вектор, а статические массивы заменяются на std::array, который куда удобнее, выбор std::begin/std::end очевиден.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.12.2013, 13:21     С массив для STL #15
Цитата Сообщение от ForEveR Посмотреть сообщение
а статические массивы заменяются на std::array
Вот когда можно будет явно не указывать размер, например в этом случае:
C++
1
std::array<int,3> a = {1,2,3};
то сишный статические массивы можно будет забыть. Ну и make_array() еще бы добавить.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.12.2013, 13:24     С массив для STL #16
Tulosba, Ну да. make_array неплохо бы.
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
27.12.2013, 13:45     С массив для STL #17
Цитата Сообщение от ForEveR Посмотреть сообщение
зло во плоти
Всё зависит от степени кривизны рук разработчика
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.12.2013, 13:49     С массив для STL #18
Qwertiy, дело не в кривизне. А в RAII.
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
27.12.2013, 14:09     С массив для STL #19
Цитата Сообщение от Tulosba Посмотреть сообщение
дело не в кривизне. А в RAII.
Одно другому не мешает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2013, 14:36     С массив для STL
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
27.12.2013, 14:36     С массив для STL #20
Qwertiy, Я что-то не понимаю, вы просто флудите или доказываете, что самостоятельный контроль за ресурсами это лучше, чем автоматический?
Yandex
Объявления
27.12.2013, 14:36     С массив для STL
Ответ Создать тему
Опции темы

Текущее время: 23:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru