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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
24.04.2013, 12:39     Как разбить вектор на части(то есть вектора того же типа) #1
Как разбить вектор на части(то есть вектора того же типа), чтобы было по 8 элементов в каждом
vector<bool> fg;//вот его надо поделить
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2013, 12:39     Как разбить вектор на части(то есть вектора того же типа)
Посмотрите здесь:

C++ Как разбить строку на вектор из строк?
C++ Вывести на экран 1 или 0 в зависимости от того, есть ли среди первых трех цифр дробной части заданного положительного вещественного числа цифра ноль
Как разбить проект на части? C++
как разбить переменную типа String на 2 части C++
Заданный вектор А, состоящий из n элементов. Переставить компоненты вектора, размещенные после самого элемента вектора А C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,271
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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,271
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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.04.2013, 16:55     Как разбить вектор на части(то есть вектора того же типа) #8
vxg, Резонный вопрос, а заради чего, мне ходить по индексам, если есть более удобные способы?)
Ну и
C++
1
b.push_back();
стоит заменить на
C++
1
b.push_back(std::vector<float>());
Ну и ваш код ломает мои глаза больше чем мой.)
vxg
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,271
24.04.2013, 16:59     Как разбить вектор на части(то есть вектора того же типа) #9
Цитата Сообщение от ForEveR Посмотреть сообщение
ходить по индексам
где?
Цитата Сообщение от ForEveR Посмотреть сообщение
стоит заменить на
смысл?
Цитата Сообщение от ForEveR Посмотреть сообщение
И p не увеличивается нигде
чуть исправил, еще раз окиньте взглядом

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

Добавлено через 32 секунды
C++
1
explicit vector (const Allocator& = Allocator());
не?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.04.2013, 18:19     Как разбить вектор на части(то есть вектора того же типа) #12
vxg, Не знаю-не знаю... http://ideone.com/56mBxU
У вектора нет push_back() или push_back(const T& = T()).
vxg
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,271
24.04.2013, 21:42     Как разбить вектор на части(то есть вектора того же типа) #13
11й наверное бузит. не понимаю почему они не захотели оставить версию без аргумента использующую конструктор без параметров для вставки объекта
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.04.2013, 22:34     Как разбить вектор на части(то есть вектора того же типа) #14
vxg, Насколько я знаю его и не было никогда =)
vxg
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,271
25.04.2013, 09:57     Как разбить вектор на части(то есть вектора того же типа) #15
Цитата Сообщение от ForEveR Посмотреть сообщение
его и не было никогда
borland c++ builder 6 собирает. и вот здесь (C/C++. Справочник программиста - Герберт Шилдт) оно есть
ровно в таком виде
C++
1
explicit vector (const Allocator& = Allocator());
"Первая форма конструктора создает пустой вектор"
в codepad не работает. уроды, что с них взять.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Модератор
 Аватар для vxg
2667 / 1678 / 158
Регистрация: 13.01.2012
Сообщений: 6,271
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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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++ Запись информации из вектора типа string в вектор типа double
Копирование части вектора в другой вектор по условию, функцией copy_if C++
Как лучше разбить байтовый массив на части? C++

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

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

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