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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
#1

Как разбить вектор на части(то есть вектора того же типа) - C++

24.04.2013, 12:39. Просмотров 1656. Ответов 19
Метки нет (Все метки)

Как разбить вектор на части(то есть вектора того же типа), чтобы было по 8 элементов в каждом
vector<bool> fg;//вот его надо поделить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2013, 12:39     Как разбить вектор на части(то есть вектора того же типа)
Посмотрите здесь:
Как разбить переменную типа String на 2 части? C++
C++ Запись информации из вектора типа string в вектор типа double
Копирование части вектора в другой вектор по условию, функцией copy_if C++
C++ Функция: вернуть вектор, в котором есть все числа из исходного вектора v, кроме заданного x
Как разбить проект на части? C++
C++ Как разбить строку на вектор из строк?
Как лучше разбить байтовый массив на части? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3118 / 1920 / 208
Регистрация: 13.01.2012
Сообщений: 7,350
24.04.2013, 12:46     Как разбить вектор на части(то есть вектора того же типа) #2
C++
1
2
3
4
5
6
    std::vector<float> a;
    for (int i = 0; i < 8; i++)
        a.push_back(i);
 
    std::vector<float> b(a.begin(), a.begin() + 4);
    std::vector<float> c(a.begin() + 4, a.begin() + 8);
Добавлено через 37 секунд
/делим вектор длиной 8 на два по 4/
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
24.04.2013, 12:51  [ТС]     Как разбить вектор на части(то есть вектора того же типа) #3
Цитата Сообщение от vxg Посмотреть сообщение
C++
1
2
3
4
5
6
    std::vector<float> a;
    for (int i = 0; i < 8; i++)
        a.push_back(i);
 
    std::vector<float> b(a.begin(), a.begin() + 4);
    std::vector<float> c(a.begin() + 4, a.begin() + 8);
Добавлено через 37 секунд
/делим вектор длиной 8 на два по 4/
спасибо большое вам, я разобрался. Зациклить уже сам постараюсь.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
24.04.2013, 16:08     Как разбить вектор на части(то есть вектора того же типа) #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
 
int main()
{
   const size_t chunk_size = 8;
   std::vector<bool> v =
   {
      true, false, true, true, false, false, true, false,
      true, false, true, true, false
   };
   const size_t chunks_num = v.size() / chunk_size;
   auto start = std::begin(v);
   const auto finish = std::end(v);
   std::vector<std::vector<bool>> chunks(v.size() % chunk_size ? chunks_num + 1 : chunks_num);
   std::generate(chunks.begin(), chunks.end(),
   [chunk_size, &start, finish]() -> std::vector<bool>
   {
      const size_t step = finish - start < chunk_size ? finish - start : chunk_size;
      const std::vector<bool> current(start, start + step);
      start += step;
      return current;
   });
   std::cout << chunks.size() << std::endl;
   for (const auto& c : chunks)
   {
      std::copy(c.begin(), c.end(), std::ostream_iterator<bool>(std::cout, " "));
      std::cout << std::endl;
   }
}
vxg
24.04.2013, 16:14
  #5

Не по теме:

/это круто, я снимаю шляпу и жму руку, всегда завидовал людям которые могут так, но, вообще то, прочитав можно выколоть глаза /

ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
24.04.2013, 16:26     Как разбить вектор на части(то есть вектора того же типа) #6
vxg, Лучше?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
 
int main()
{
   using namespace std;
 
   const size_t chunk_len = 8;
   const vector<bool> v =
   {
      true, false, true, true, false, false, true, false,
      true, false, false, true
   };
   const size_t chunks_num = v.size() / chunk_len;
   const size_t chunks_num_real = v.size() % chunk_len ? chunks_num + 1 : chunks_num;
 
   auto current = begin(v);
   const auto finish = end(v);
   vector<vector<bool>> chunks(chunks_num_real);
   for (auto& c : chunks)
   {
      auto distance = finish - current;
      auto step = distance < chunk_len ? distance : chunk_len;
      c.assign(current, current + step);
      current += step;
   }
 
   cout << chunks.size() << endl;
   for (const auto& c : chunks)
   {
      copy(c.begin(), c.end(), ostream_iterator<bool>(cout, " "));
      cout << std::endl;
   }
}
vxg
Модератор
3118 / 1920 / 208
Регистрация: 13.01.2012
Сообщений: 7,350
24.04.2013, 16:52     Как разбить вектор на части(то есть вектора того же типа) #7
Цитата Сообщение от ForEveR Посмотреть сообщение
Лучше?
май айз! май бьютифул айз!!
почему не

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int a_size = 8;
 
std::vector<float> a;
for (int i = 0; i < a_size; i++)
    a.push_back(i);
 
int chunk_size = 4;
 
int chunks_count = a.size() / chunk_size;
 
std::vector<float>::iterator beg = a.begin();
std::vector<float>::iterator end = beg + chunk_size;
 
std::vector< std::vector<float> > b;
for (int i = 0; i < chunks_count; i++)
{
    b.push_back();
    b.back().insert(b.back().begin(), beg, end);
    beg += chunk_size;
    end += chunk_size;
}
 
if (a.size() % chunk_size)
{
    b.push_back();
    b.back().insert(b.back().begin(), beg, a.end());
}
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
24.04.2013, 16:55     Как разбить вектор на части(то есть вектора того же типа) #8
vxg, Резонный вопрос, а заради чего, мне ходить по индексам, если есть более удобные способы?)
Ну и
C++
1
b.push_back();
стоит заменить на
C++
1
b.push_back(std::vector<float>());
Ну и ваш код ломает мои глаза больше чем мой.)
vxg
Модератор
3118 / 1920 / 208
Регистрация: 13.01.2012
Сообщений: 7,350
24.04.2013, 16:59     Как разбить вектор на части(то есть вектора того же типа) #9
Цитата Сообщение от ForEveR Посмотреть сообщение
ходить по индексам
где?
Цитата Сообщение от ForEveR Посмотреть сообщение
стоит заменить на
смысл?
Цитата Сообщение от ForEveR Посмотреть сообщение
И p не увеличивается нигде
чуть исправил, еще раз окиньте взглядом

Добавлено через 1 минуту
одно
C++
1
for (auto& c : chunks)
чего стоит) ощущение как на американских горках
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
24.04.2013, 17:00     Как разбить вектор на части(то есть вектора того же типа) #10
vxg, В плане смысл? Ничего, что у вектора просто нет функции push_back не принимающей никаких аргументов?
Вам просто не нравится новый стандарт, а по мне он крайне удобен, auto& c куда более приятно, чем std::vector<bool>& c ИМХО.
vxg
Модератор
3118 / 1920 / 208
Регистрация: 13.01.2012
Сообщений: 7,350
24.04.2013, 17:06     Как разбить вектор на части(то есть вектора того же типа) #11
Цитата Сообщение от ForEveR Посмотреть сообщение
Ничего, что у вектора просто нет функции push_back не принимающей никаких аргументов?
мммм.. а как это у меня среда схавала?

Добавлено через 32 секунды
C++
1
explicit vector (const Allocator& = Allocator());
не?
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
24.04.2013, 18:19     Как разбить вектор на части(то есть вектора того же типа) #12
vxg, Не знаю-не знаю... http://ideone.com/56mBxU
У вектора нет push_back() или push_back(const T& = T()).
vxg
Модератор
3118 / 1920 / 208
Регистрация: 13.01.2012
Сообщений: 7,350
24.04.2013, 21:42     Как разбить вектор на части(то есть вектора того же типа) #13
11й наверное бузит. не понимаю почему они не захотели оставить версию без аргумента использующую конструктор без параметров для вставки объекта
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
24.04.2013, 22:34     Как разбить вектор на части(то есть вектора того же типа) #14
vxg, Насколько я знаю его и не было никогда =)
vxg
Модератор
3118 / 1920 / 208
Регистрация: 13.01.2012
Сообщений: 7,350
25.04.2013, 09:57     Как разбить вектор на части(то есть вектора того же типа) #15
Цитата Сообщение от ForEveR Посмотреть сообщение
его и не было никогда
borland c++ builder 6 собирает. и вот здесь (C/C++. Справочник программиста - Герберт Шилдт) оно есть
ровно в таком виде
C++
1
explicit vector (const Allocator& = Allocator());
"Первая форма конструктора создает пустой вектор"
в codepad не работает. уроды, что с них взять.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
25.04.2013, 10:24     Как разбить вектор на части(то есть вектора того же типа) #16
vxg, Да о чем ты? Я про push_back, а ты мне про дефолтный конструктор вектора.
По стандарту у вектора есть

C++
1
void push_back(const T& x);
И в 11 стандарте добавилось
C++
1
void push_back(T&& x);
vxg
Модератор
3118 / 1920 / 208
Регистрация: 13.01.2012
Сообщений: 7,350
25.04.2013, 10:34     Как разбить вектор на части(то есть вектора того же типа) #17
Цитата Сообщение от ForEveR Посмотреть сообщение
Я про push_back, а ты мне про дефолтный конструктор вектора
мне стыдно, туплю. да, все верно. причина по которой билдер умудряется собирать сокрыта в следующих строках обнаруженных в заголовке
C++
1
2
3
4
# ifndef _STLP_NO_ANACHRONISMS
  void push_back() { push_back(_Tp()); }
  iterator insert(iterator __position) { return insert(__position, _Tp()); }
# endif
Добавлено через 57 секунд
...хотя на мой взгляд странно что они не сделали это частью стандартного поведения
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
25.04.2013, 10:40     Как разбить вектор на части(то есть вектора того же типа) #18
vxg, Далеко не каждый тип имеет конструктор по умолчанию. Тут скорее билдер опять отличился нестандартными расширениями. Скорее просто для безопасности и отсутствия наложения определенных ограничений.
vxg
25.04.2013, 10:53
  #19

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Тут скорее билдер опять отличился нестандартными расширениями
идеал недостижим. у остальных тоже рыло в пуху

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2013, 11:54     Как разбить вектор на части(то есть вектора того же типа)
Еще ссылки по теме:
C++ Вывести на экран 1 или 0 в зависимости от того, есть ли среди первых трех цифр дробной части заданного положительного вещественного числа цифра ноль
Возврат объекта шаблонного типа от типа Type из специализации шаблона метода от того же типа C++
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А C++
C++ Вектор из матриц C++, как добавить новый элемент вектора?

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.04.2013, 11:54     Как разбить вектор на части(то есть вектора того же типа) #20
Цитата Сообщение от vxg Посмотреть сообщение
_STLP_NO_ANACHRONISMS
веселенький дефайн
Цитата Сообщение от ForEveR Посмотреть сообщение
Далеко не каждый тип имеет конструктор по умолчанию.
Значит, чтоб собралось придется добавить.
Yandex
Объявления
25.04.2013, 11:54     Как разбить вектор на части(то есть вектора того же типа)
Ответ Создать тему
Опции темы

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