Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
1

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

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

Как разбить вектор на части(то есть вектора того же типа), чтобы было по 8 элементов в каждом
vector<bool> fg;//вот его надо поделить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2013, 12:39
Ответы с готовыми решениями:

Написать функцию, которая принимает А вектор как аргумент и возвращает три вектора разделяя А вектор на три части
Есть А вектор A=... Написать функцию в Матлабе ,который принимает А вектор как аргумент и...

Как разбить переменную типа String на 2 части?
есть переменная типа String, например String slovo= &quot;кибер форум&quot; как ее разбить на 2 чести ( до...

Запись информации из вектора типа string в вектор типа double
Как записать только числа , которые хранятся в векторе типа стринг, в вектор типа дабл, в векторе...

Вектор А разбить на 2 вектора В и С из отрицательных и положительных чисел
Вектор А, размерности n, состоящий из положительных и отрицательных целых чисел, разбить на 2...

19
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
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/
спасибо большое вам, я разобрался. Зациклить уже сам постараюсь.
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
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;
   }
}
1
vxg
24.04.2013, 16:14
  #5

Не по теме:

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

0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
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;
   }
}
0
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
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());
}
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
24.04.2013, 16:55 8
vxg, Резонный вопрос, а заради чего, мне ходить по индексам, если есть более удобные способы?)
Ну и
C++
1
b.push_back();
стоит заменить на
C++
1
b.push_back(std::vector<float>());
Ну и ваш код ломает мои глаза больше чем мой.)
0
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
24.04.2013, 16:59 9
Цитата Сообщение от ForEveR Посмотреть сообщение
ходить по индексам
где?
Цитата Сообщение от ForEveR Посмотреть сообщение
стоит заменить на
смысл?
Цитата Сообщение от ForEveR Посмотреть сообщение
И p не увеличивается нигде
чуть исправил, еще раз окиньте взглядом

Добавлено через 1 минуту
одно
C++
1
for (auto& c : chunks)
чего стоит) ощущение как на американских горках
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
24.04.2013, 17:00 10
vxg, В плане смысл? Ничего, что у вектора просто нет функции push_back не принимающей никаких аргументов?
Вам просто не нравится новый стандарт, а по мне он крайне удобен, auto& c куда более приятно, чем std::vector<bool>& c ИМХО.
0
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
24.04.2013, 17:06 11
Цитата Сообщение от ForEveR Посмотреть сообщение
Ничего, что у вектора просто нет функции push_back не принимающей никаких аргументов?
мммм.. а как это у меня среда схавала?

Добавлено через 32 секунды
C++
1
explicit vector (const Allocator& = Allocator());
не?
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
24.04.2013, 18:19 12
vxg, Не знаю-не знаю... http://ideone.com/56mBxU
У вектора нет push_back() или push_back(const T& = T()).
0
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
24.04.2013, 21:42 13
11й наверное бузит. не понимаю почему они не захотели оставить версию без аргумента использующую конструктор без параметров для вставки объекта
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
24.04.2013, 22:34 14
vxg, Насколько я знаю его и не было никогда =)
0
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
25.04.2013, 09:57 15
Цитата Сообщение от ForEveR Посмотреть сообщение
его и не было никогда
borland c++ builder 6 собирает. и вот здесь (C/C++. Справочник программиста - Герберт Шилдт) оно есть
ровно в таком виде
C++
1
explicit vector (const Allocator& = Allocator());
"Первая форма конструктора создает пустой вектор"
в codepad не работает. уроды, что с них взять.
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
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);
1
Модератор
3309 / 2099 / 334
Регистрация: 13.01.2012
Сообщений: 8,160
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 секунд
...хотя на мой взгляд странно что они не сделали это частью стандартного поведения
0
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
25.04.2013, 10:40 18
vxg, Далеко не каждый тип имеет конструктор по умолчанию. Тут скорее билдер опять отличился нестандартными расширениями. Скорее просто для безопасности и отсутствия наложения определенных ограничений.
0
vxg
25.04.2013, 10:53
  #19

Не по теме:

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

0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.04.2013, 11:54 20
Цитата Сообщение от vxg Посмотреть сообщение
_STLP_NO_ANACHRONISMS
веселенький дефайн
Цитата Сообщение от ForEveR Посмотреть сообщение
Далеко не каждый тип имеет конструктор по умолчанию.
Значит, чтоб собралось придется добавить.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2013, 11:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Дан целочисленный вектор А(12), среди его элементов есть одинаковые. Создать вектор В из различных элементов вектора А
Дан целочисленный вектор А(12), среди его элементов есть одинаковые. Создать вектор В из различных...

Копирование части вектора в другой вектор по условию, функцией copy_if
Добрый день. Есть вектор структуры. Нужно сделать копию вектора по условию. Можно конечно в...

Осуществить циклический сдвиг компонент заданного вектора A(N) влево на одну позицию, то есть получить вектор A = ( a2 , a3 , . , aN, a1 ) Как это с
Осуществить циклический сдвиг компонент заданного вектора A(N) влево на одну позицию, то есть...

Создать метод типа вектор, для разных типов вектора
Нужно создать абстрактный класс, в котором будет метод Add(), типа вектор, но этот метод должен...


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

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

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