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

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

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

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

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

Как разбить вектор на части(то есть вектора того же типа), чтобы было по 8 элементов в каждом
vector<bool> fg;//вот его надо поделить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2013, 12:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как разбить вектор на части(то есть вектора того же типа) (C++):

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

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

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

Функция: вернуть вектор, в котором есть все числа из исходного вектора v, кроме заданного x - C++
есть вот такая задача ф-цию filter, которая принимает вектор чисел v и аргумент x. Она возвращает вектор, в котором есть все числа из v,...

Как разбить проект на части? - C++
Привет всем! Подскажите правило, по которому можно разбить большой проект на отдельные части, помимо всего прочего, также содержащий...

Как разбить строку на вектор из строк? - C++
Здравствуйте. Хочу написать программу, которая текст преобразует в вектор,каждый элемент которого-отдельное слово. Создаю два объекта...

19
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
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
Мишутка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
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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;
   }
}
1
vxg
24.04.2013, 16:14
  #5

Не по теме:

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

0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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;
   }
}
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
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
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.04.2013, 16:55 #8
vxg, Резонный вопрос, а заради чего, мне ходить по индексам, если есть более удобные способы?)
Ну и
C++
1
b.push_back();
стоит заменить на
C++
1
b.push_back(std::vector<float>());
Ну и ваш код ломает мои глаза больше чем мой.)
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
24.04.2013, 16:59 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
ходить по индексам
где?
Цитата Сообщение от ForEveR Посмотреть сообщение
стоит заменить на
смысл?
Цитата Сообщение от ForEveR Посмотреть сообщение
И p не увеличивается нигде
чуть исправил, еще раз окиньте взглядом

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

Добавлено через 32 секунды
C++
1
explicit vector (const Allocator& = Allocator());
не?
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.04.2013, 18:19 #12
vxg, Не знаю-не знаю... http://ideone.com/56mBxU
У вектора нет push_back() или push_back(const T& = T()).
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
24.04.2013, 21:42 #13
11й наверное бузит. не понимаю почему они не захотели оставить версию без аргумента использующую конструктор без параметров для вставки объекта
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.04.2013, 22:34 #14
vxg, Насколько я знаю его и не было никогда =)
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,607
25.04.2013, 09:57 #15
Цитата Сообщение от ForEveR Посмотреть сообщение
его и не было никогда
borland c++ builder 6 собирает. и вот здесь (C/C++. Справочник программиста - Герберт Шилдт) оно есть
ровно в таком виде
C++
1
explicit vector (const Allocator& = Allocator());
"Первая форма конструктора создает пустой вектор"
в codepad не работает. уроды, что с них взять.
0
25.04.2013, 09:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2013, 09:57
Привет! Вот еще темы с ответами:

Как лучше разбить байтовый массив на части? - C++
Имеется байтовый массив (uint8_t), для последующей передачи необходимо разбить его на части. В этот массив запакованы разнообразные...

Вывести на экран 1 или 0 в зависимости от того, есть ли среди первых трех цифр дробной части заданного положительного вещественного числа цифра ноль - C++
Вывести на экран 1 или 0 в зависимости от того, есть ли среди первых трех цифр дробной части заданного положительного вещественного числа...

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

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


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

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

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