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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
#1

массив bool и вектор) - C++

12.09.2013, 10:39. Просмотров 1157. Ответов 22
Метки нет (Все метки)

Ребята всем привет)
ситуация такая скоро сегодня понадобиться написать такую штуку
у нас есть куча bool там их 1000000 значений
bool *array = new bool[1000000];
.... тут мы их подсасываем из файла и как мне их ребята вставить в vector<bool> array_vector;
и хочу вставить не по одному типа добавляя а есть какой ни будь метод сразу же запулить их все разом???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2013, 10:39     массив bool и вектор)
Посмотрите здесь:

C++ Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
C++ Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
не работает bool xor(bool a, bool b) C++
Копирование Массив в Вектор C++
Вектор и Массив C++
C++ как правильно понять тип bool ? bool true(const string &str) и что дает это значение ?
bool+bool=string C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
12.09.2013, 10:44     массив bool и вектор) #2
можно создать вектор подходящего размера в миллион элементов. дальше при чтении файла записывать нужные данные в вектор. по крайней мере это будет быстрее и эффективнее, по сравнение с push_back()
Петррр
5940 / 3377 / 335
Регистрация: 28.10.2010
Сообщений: 5,926
12.09.2013, 10:53     массив bool и вектор) #3
Конструктор вектора принимает два итератора.
C++
1
std::vector<bool> vec(array, array + 1000000);
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
12.09.2013, 11:02  [ТС]     массив bool и вектор) #4
Цитата Сообщение от ___ Посмотреть сообщение
можно создать вектор подходящего размера в миллион элементов. дальше при чтении файла записывать нужные данные в вектор. по крайней мере это будет быстрее и эффективнее, по сравнение с push_back()
я же эти методы уже отверг в начальном сообщении.

Добавлено через 42 секунды
Цитата Сообщение от Петррр Посмотреть сообщение
Конструктор вектора принимает два итератора.
C++
1
std::vector<bool> vec(array, array + 1000000);
спасибо, попробуй этот метод

Добавлено через 2 минуты
а как подпихивать ещё 1 млн значений только через добавление по элементу?

Добавлено через 6 минут
всем спасибо) тема исчерпана
Петррр
5940 / 3377 / 335
Регистрация: 28.10.2010
Сообщений: 5,926
12.09.2013, 11:05     массив bool и вектор) #5
C++
1
vec.insert(vec.end(), other_array, other_array + 1000000);
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
12.09.2013, 12:19     массив bool и вектор) #6
Ko, используйте список вместо векторов. или именно вектор нужен?
в списках вставка/удаление элементов очень быстро выполняются
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
12.09.2013, 12:27     массив bool и вектор) #7
vector<bool>? Кажется,вместо него стоит использовать vector<char>
http://alenacpp.blogspot.com/2005/06/vector.html
здесь можно посмотреть подробнее
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
12.09.2013, 12:49     массив bool и вектор) #8
Цитата Сообщение от ___ Посмотреть сообщение
Ko, используйте список вместо векторов. или именно вектор нужен?
в списках вставка/удаление элементов очень быстро выполняются
Вектор добавляет быстрее, если место зарезервировано. Если знаешь, сколько будешь добавлять элементов, то делаешь перед этим
vector.reserve(1000000);

А вообще самый быстрый способ будет сразу считывать из файла, ну или на крайняк предложенный выше
C++
1
std::vector<bool> vec(std::begin(array), std::end(array));
Добавлено через 6 минут
Цитата Сообщение от fatalis Посмотреть сообщение
vector<bool>? Кажется,вместо него стоит использовать vector<char>
http://alenacpp.blogspot.com/2005/06/vector.html
здесь можно посмотреть подробнее
Зачем может понадобиться
C++
1
bool *pBool = &myVBool[0];
по ссылке?
C++
1
auto iterator = myVBool.begin();
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
12.09.2013, 13:20  [ТС]     массив bool и вектор) #9
Цитата Сообщение от ___ Посмотреть сообщение
Ko, используйте список вместо векторов. или именно вектор нужен?
в списках вставка/удаление элементов очень быстро выполняются
vector<bool> представляется как битовые значения а не байтовые, экономия 8 раз если использовать даже чар

Добавлено через 1 минуту
Цитата Сообщение от fatalis Посмотреть сообщение
vector<bool>? Кажется,вместо него стоит использовать vector<char>
http://alenacpp.blogspot.com/2005/06/vector.html
здесь можно посмотреть подробнее
vector<bool> представляется как битовые значения а не байтовые, экономия 8 раз если использовать даже чар
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
12.09.2013, 13:24     массив bool и вектор) #10
vector<bool> не совсем контейнер, попробуйте использовать специально заточенный bitset для этих целей
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
12.09.2013, 13:26  [ТС]     массив bool и вектор) #11
C++
1
2
3
4
5
    int size_array = 2000;
    bool *array_ku = new bool[size_array];
    vector < bool > aaa; <= Этот вектор создаётся в классе и к нему я не могу сразу же подпихнуть массив.
 
    aaa.insert(aaa.end(), array_ku, array_ku + size_array ); <= это работает на ура))) спасибо
Добавлено через 1 минуту
Цитата Сообщение от SummerRain Посмотреть сообщение
vector<bool> не совсем контейнер, попробуйте использовать специально заточенный bitset для этих целей
меня устраивает, хотя я попробую протестировать скоростные параметры этого bitset, как мне его использовать вместо вектора, пожалуйста покажите пример
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
12.09.2013, 13:27     массив bool и вектор) #12
Цитата Сообщение от Ko Посмотреть сообщение
vector<bool> представляется как битовые значения а не байтовые, экономия 8 раз если использовать даже чар

Добавлено через 1 минуту


vector<bool> представляется как битовые значения а не байтовые, экономия 8 раз если использовать даже чар
Эта "экономия" никому не нужна. Человек спрашивает о том,как сделать задачу максимально быстро.Очевидно,что кривой vector<bool> проиграет vector<char> в скорости в несколько раз
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
12.09.2013, 13:37  [ТС]     массив bool и вектор) #13
Цитата Сообщение от fatalis Посмотреть сообщение
Эта "экономия" никому не нужна. Человек спрашивает о том,как сделать задачу максимально быстро.Очевидно,что кривой vector<bool> проиграет vector<char> в скорости в несколько раз
Человек этот я) и экономия для меня нужна потому что я оперирую объёмом оперативки далеко более 10 гигов, это если надо создать "легкую" программу которая занимает не более 4 гигов оперативки то да лучше использовать чар. Но 2 месяца назад я всё это разбирал на этом форуме, у меня был массив чаров размером к примеру 100000X100000, занимал много место в памяти, я переделал этот массив в vector<bool> и получил уменьшение 8 раз а скорость упала всего на 12%. я чётко поставил задачу как загрузить кучу bool-ев в vector<bool> ) придерживаемся этой темы)
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
12.09.2013, 13:58     массив bool и вектор) #14
А bitset не замеряли на скорость? Интересно бы сравнить
P.S А что это за задача с массивами 100000X100000?
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
12.09.2013, 14:22     массив bool и вектор) #15
Цитата Сообщение от Ko Посмотреть сообщение
как мне его использовать вместо вектора, пожалуйста покажите пример
как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <fstream>
#include <iostream>
#include <bitset>
#include <vector>
#include <iterator>
 
int main(int argc, char* argv[])
{
    std::ifstream inFile("file.dat",std::ios::in|std::ios::binary);
    std::vector<std::bitset<8> > bite;
 
    std::copy(
        std::istream_iterator<std::bitset<8> >(inFile),
        std::istream_iterator<std::bitset<8> >(),
        std::back_inserter(bite)
    );
}
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
12.09.2013, 14:49  [ТС]     массив bool и вектор) #16
Секундочку SummerRain у нас массив) булов) их 1000000 как их вставить?

Добавлено через 1 минуту
у нас миллион массивов) по миллиону значений)

Добавлено через 20 секунд
у нас миллион массивов) по миллиону значений)

Добавлено через 1 минуту
нельзя же так прямо файл подать)
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
12.09.2013, 14:54     массив bool и вектор) #17
Ну тогда как-то так.
C++
1
2
3
4
5
std::copy(
        bit_array,
        bit_array + 1000000,
        std::back_inserter(myBitset)
    );
Может я не совсем понял то, что вам надо.
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
12.09.2013, 15:00  [ТС]     массив bool и вектор) #18
Цитата Сообщение от fatalis Посмотреть сообщение
А bitset не замеряли на скорость? Интересно бы сравнить
P.S А что это за задача с массивами 100000X100000?
самому интересно воспользоваться битсетом, но он мне как то не нравится, но я попробую протестирую, скажу сколько в памяти занимает и как по скорости себя ведёт, быстрей чаров то вряд ли будет. замерю вообще и отпишу сюда если кому интересно, а насчёт задачи то есть 1млн или 10млн объектов они скрещиваются и нужно записать в матрицу состояние, подходит или не подходит скрещивание. Делается несколько дней всё это дело. гонял Xeon Phi на этой задачи, не сильно конечно пока быстрые у интела аппараты.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    int size_array = 2000;
    bool *array_ku = new bool[size_array];
 
    std::vector<std::bitset<100000> > aaa;
 
    std::copy(
        array_ku,
        array_ku + size_array,
        std::back_inserter(aaa)
        );
 
    cout << aaa.size() << endl;
 
    for (int i = 0; i < aaa.size(); i++ )
    {
        cout << "I: "<<i <<" "<< aaa[i][0] << endl;
    }
так вот получается двумерный массив первое измерение 2000 а второе 100000;
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
12.09.2013, 15:03     массив bool и вектор) #19
Цитата Сообщение от Ko Посмотреть сообщение
есть 1млн или 10млн объектов они скрещиваются и нужно записать в матрицу состояние, подходит или не подходит скрещивание
Может для этого стоит использовать разряжённые матрицы? Наверняка скрещивание происходит гораздо реже.
Поэтому с помощью этих матриц можно существенно сократить затраты по памяти и времени.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 15:08     массив bool и вектор)
Еще ссылки по теме:

C++ Закрутить массив в вектор
C++ Массив и вектор
C++ Изменить значение bool a = true в bool a = false
Статический массив(вектор) C++

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

Или воспользуйтесь поиском по форуму:
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
12.09.2013, 15:08  [ТС]     массив bool и вектор) #20
короче ребята) останавливаемся на vector <bool> )

Добавлено через 2 минуты
Цитата Сообщение от SummerRain Посмотреть сообщение
Может для этого стоит использовать разряжённые матрицы? Наверняка скрещивание происходит гораздо реже.
Поэтому с помощью этих матриц можно существенно сократить затраты по памяти и времени.
всё со всеми скрещивается) разряженные и не разряженные) всё это перебрал за 2 года, это не проблема что много памяти требуется, в принцепе можно использовать GPU но актуально только использовать последнии линейки кеплера они будут опережать расчёты если не будет громадной матрицы, кстати без матрицы тоже можно работать только скорость упадёт в 3 раза. к сожалению. спасибо.

Добавлено через 49 секунд
всё что требовалось мы добились, всем спасибо) пора подкрепиться)))))
Yandex
Объявления
12.09.2013, 15:08     массив bool и вектор)
Ответ Создать тему
Опции темы

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