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

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

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

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

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

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

не работает bool xor(bool a, bool b) - C++
Учусь по &quot;Базовому курсу&quot; Герберта Шилда #include &lt;iostream&gt; bool xor(bool a, bool d); int main() { bool p, q; cout...

Изменить значение bool a = true в bool a = false - C++
// Логическое выражения - варианты #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { ...

как правильно понять тип bool ? bool true(const string &str) и что дает это значение ? - C++
задам может глупый вопрос, но прошу ответить. как правильно понять тип bool ? bool true(const string &amp;str) и что дает это...

Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W - C++
Всем привет=) Помогите оформить правильно, фот наработка: for(int i = 0, j = 0, c = 0; i &lt; 20; i++) { if(x &lt; 0) { ...

Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W - C++
Помогите с задачками 1.Задан вектор X. Положительные числа переписать в массив Y, а отрицательные в массив W. 2.Определить, сколько...

bool+bool=string - C++
Здравствуйте! Прошу помощи в задаче, существует 4 функции, возвращающие 1/0, нужно эти bool последовательно соединить в string. Т.е....

22
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
12.09.2013, 10:44 #2
можно создать вектор подходящего размера в миллион элементов. дальше при чтении файла записывать нужные данные в вектор. по крайней мере это будет быстрее и эффективнее, по сравнение с push_back()
0
Петррр
5980 / 3417 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
12.09.2013, 10:53 #3
Конструктор вектора принимает два итератора.
C++
1
std::vector<bool> vec(array, array + 1000000);
1
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
12.09.2013, 11:02  [ТС] #4
Цитата Сообщение от ___ Посмотреть сообщение
можно создать вектор подходящего размера в миллион элементов. дальше при чтении файла записывать нужные данные в вектор. по крайней мере это будет быстрее и эффективнее, по сравнение с push_back()
я же эти методы уже отверг в начальном сообщении.

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

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

Добавлено через 6 минут
всем спасибо) тема исчерпана
0
Петррр
5980 / 3417 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
12.09.2013, 11:05 #5
C++
1
vec.insert(vec.end(), other_array, other_array + 1000000);
1
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
12.09.2013, 12:19 #6
Ko, используйте список вместо векторов. или именно вектор нужен?
в списках вставка/удаление элементов очень быстро выполняются
0
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
12.09.2013, 12:27 #7
vector<bool>? Кажется,вместо него стоит использовать vector<char>
http://alenacpp.blogspot.com/2005/06/vector.html
здесь можно посмотреть подробнее
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
12.09.2013, 12:49 #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();
0
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
12.09.2013, 13:20  [ТС] #9
Цитата Сообщение от ___ Посмотреть сообщение
Ko, используйте список вместо векторов. или именно вектор нужен?
в списках вставка/удаление элементов очень быстро выполняются
vector<bool> представляется как битовые значения а не байтовые, экономия 8 раз если использовать даже чар

Добавлено через 1 минуту
Цитата Сообщение от fatalis Посмотреть сообщение
vector<bool>? Кажется,вместо него стоит использовать vector<char>
http://alenacpp.blogspot.com/2005/06/vector.html
здесь можно посмотреть подробнее
vector<bool> представляется как битовые значения а не байтовые, экономия 8 раз если использовать даже чар
0
SummerRain
327 / 326 / 17
Регистрация: 16.12.2012
Сообщений: 544
12.09.2013, 13:24 #10
vector<bool> не совсем контейнер, попробуйте использовать специально заточенный bitset для этих целей
0
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
12.09.2013, 13:26  [ТС] #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, как мне его использовать вместо вектора, пожалуйста покажите пример
0
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
12.09.2013, 13:27 #12
Цитата Сообщение от Ko Посмотреть сообщение
vector<bool> представляется как битовые значения а не байтовые, экономия 8 раз если использовать даже чар

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


vector<bool> представляется как битовые значения а не байтовые, экономия 8 раз если использовать даже чар
Эта "экономия" никому не нужна. Человек спрашивает о том,как сделать задачу максимально быстро.Очевидно,что кривой vector<bool> проиграет vector<char> в скорости в несколько раз
0
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
12.09.2013, 13:37  [ТС] #13
Цитата Сообщение от fatalis Посмотреть сообщение
Эта "экономия" никому не нужна. Человек спрашивает о том,как сделать задачу максимально быстро.Очевидно,что кривой vector<bool> проиграет vector<char> в скорости в несколько раз
Человек этот я) и экономия для меня нужна потому что я оперирую объёмом оперативки далеко более 10 гигов, это если надо создать "легкую" программу которая занимает не более 4 гигов оперативки то да лучше использовать чар. Но 2 месяца назад я всё это разбирал на этом форуме, у меня был массив чаров размером к примеру 100000X100000, занимал много место в памяти, я переделал этот массив в vector<bool> и получил уменьшение 8 раз а скорость упала всего на 12%. я чётко поставил задачу как загрузить кучу bool-ев в vector<bool> ) придерживаемся этой темы)
0
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
12.09.2013, 13:58 #14
А bitset не замеряли на скорость? Интересно бы сравнить
P.S А что это за задача с массивами 100000X100000?
0
SummerRain
327 / 326 / 17
Регистрация: 16.12.2012
Сообщений: 544
12.09.2013, 14:22 #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)
    );
}
1
12.09.2013, 14:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 14:22
Привет! Вот еще темы с ответами:

Сформировать массив типа bool из массива типа char - C++
Доброго времени суток! После ввода элементов массива вылазит ошибка &quot;Необработанное исключение: System.NullReferenceException ... &quot;...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

Массив и вектор - C++
Не могу понят почему не работает данный код. Точнее оно работало правильно. Но перестал работать. Ввел малозначительные изменение перестал...

Вектор и Массив - C++
Уважаемые! Пошел на курсы учиться С++, но из за завала на работе пропустил много занятий и теперь проблемы с пониманием материала. Если...


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

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

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