Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197

std::vector

07.03.2013, 11:08. Показов 1269. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста разумно-ли использовать
C++
1
std::vector
если у меня в векторе может храниться довольно большое кол-во записей (я с таким кол-вом пока что не сталкивался) от 5к+ (думаю может доходить и до всех 50к+).

Так как я раньше не сталкивался с векторами возник такой вопрос.
Можно ли как-то по итератору получить доступ к переменной хранящейся в векторе не выталкивая его из вектора и не создавая доп. переменных?
Т.е. что-то типа:
C++
1
*it.z;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.03.2013, 11:08
Ответы с готовыми решениями:

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

Как изменять размер std::vector<std::vector>?
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: std::vector&lt;std::vector&lt;float&gt;&gt; data; ...

15
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
07.03.2013, 11:25
А что Вы хотите использовать вместо вектора? Если конечное число элементов известно, то можно сделать обычный массив, если не известно, то писать все ручками, либо как раз юзать вектор.

А как Вы "выталкивать" элемент собрались? Это же не стэк в конце то концов. По сути итератор это обертка над указателем на элемент. Так же в векторе есть оператор индексации для прямого доступа к элементу и метод at для "безопасного" доступа.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
07.03.2013, 11:26
1) Вполне, лишь бы памяти хватило.
2)
Цитата Сообщение от PakistanCode Посмотреть сообщение
Можно ли как-то по итератору получить доступ к переменной хранящейся в векторе не выталкивая его из вектора и не создавая доп. переменных?
Можно:
C++
1
2
3
vector <int> vec;
vec.push_back(50);
*vec.begin() += 100;
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
07.03.2013, 15:00
Цитата Сообщение от PakistanCode Посмотреть сообщение
C++
1
*it.z;
как я понял что в векторе ты собираешься хранить объекты какого то класса?, если так то его стоит снабдить конструктором копирования и, желательно точнее знать максимальное кол-во элементов в векторе, иначе при добавлении и не хватке памяти будет перекопирование всех остальных элементов, на что будет уходить время, т.е создать в начале вектор определенного размера
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
11.03.2013, 15:47
Цитата Сообщение от aLarman Посмотреть сообщение
его стоит снабдить конструктором копирования
Конструктор копии и оператор присваивания нужен только в том случае, если в классе используются какие-то ресурсы, копирование которых является нетривиальной задачей (т.е. для которых не подходит предоставленный компилятором вариант копирования). И в этом случае два этих элемента необходимы для корректной работы класса вообще, и никак не связаны с использование std::vector. Класс же наподобие такого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Foo
{
public:
    Foo(int foo = 0):
        m_foo(foo)
    {
    }
    
    int get_foo() const
    {
        return m_foo;
    }
    
    void set_foo(int foo)
    {
        m_foo = foo;
    }
    
private;
    int m_foo;
};
можно использовать с std::vector, не описывая конструктор копии явно, хватит и предоставленного компилятором.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
11.03.2013, 16:10
Цитата Сообщение от silent_1991 Посмотреть сообщение
Конструктор копии и оператор присваивания нужен только в том случае, если в классе используются какие-то ресурсы, копирование которых является нетривиальной задачей
я ж не Ванга, что бы знать какие у него будут данные(указатели по которым буду выделять память или переменные встроенных типов), поэтому чтобы не делать ошибок и разбираться пару недель "а почему у меня криво копирует?" предлагаю это делать(писать констркутор копий)
0
11.03.2013, 16:17

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
поэтому чтобы не делать ошибок и разбираться пару недель "а почему у меня криво копирует?" предлагаю это делать(писать констркутор копий)
Всё упирается в знание и понимание основ. Я сторонник того, чтобы объяснить человеку, для чего нужно делать те или иные манипуляции, и предоставить ему решать, нужны они в данном конкретном случае или нет, вместо того, чтобы сказать "тут надо делать так", и хоть трава не расти. К сожалению, чаще применяется второй вариант, в результате чего вырастают программисты, которые в начало каждого файла с исходными кодами (и даже заголовочного файла) пишут using namespace std;, при этом даже не понимая, для чего они это делают.

1
11.03.2013, 16:27

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
"тут надо делать так"
Цитата Сообщение от aLarman Посмотреть сообщение
его стоит снабдить конструктором копирования
это совет, а не обязательные действия

0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.03.2013, 16:29
Цитата Сообщение от PakistanCode Посмотреть сообщение
50к+
Ну, и?
Я бы еще понял, если бы хотя бы 100 мегабайт набиралось...
Мне вот недавно нужен был массив на 4 гига - статические массивы не компилятся, выделение памяти через new кидает исключение, malloc возвращает NULL... А вектор спокойно отработал (действие происходило в студии).
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
11.03.2013, 16:33
Цитата Сообщение от diagon Посмотреть сообщение
Мне вот недавно нужен был массив на 4 гига - статические массивы не компилятся, выделение памяти через new кидает исключение, malloc возвращает NULL... А вектор спокойно отработал (действие происходило в студии).
у меня на 100кк элементов вектор вылетает с исключением как то странно 100кк элементов это еще тока <100Мб
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.03.2013, 17:53
Цитата Сообщение от diagon Посмотреть сообщение
Мне вот недавно нужен был массив на 4 гига - статические массивы не компилятся, выделение памяти через new кидает исключение, malloc возвращает NULL... А вектор спокойно отработал (действие происходило в студии).
А как такое возможно ? У вектора тот же массив внутри, а если такого куска памяти нет - то откуда ему взяться ?
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.03.2013, 18:00
Цитата Сообщение от Avazart Посмотреть сообщение
А как такое возможно ? У вектора тот же массив внутри, а если такого куска памяти нет - то откуда ему взяться ?
Ну, возможно, если вектор превышает некую планку, то он распиливается на куски. Вникать мне было лень, там для инициализации вектора какие-то функции со страшными именами используются. Да и в принципе, я не понимаю, почему нельзя создать массив в 4 гигабайта на 64битной ос, когда доступно больше 6 гигабайт (впрочем, в этом вопросе я не разбираюсь).
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
11.03.2013, 18:01
Цитата Сообщение от diagon Посмотреть сообщение
Да и в принципе, я не понимаю, почему нельзя создать массив в 4 гигабайта на 64битной ос, когда доступно больше 6 гигабайт.
если ничего не путаю, есть определенный размер для одного процесса, видимо по этой причине
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.03.2013, 18:06
Цитата Сообщение от diagon Посмотреть сообщение
Ну, возможно, если вектор превышает некую планку, то он распиливается на куски.
Ну так это противоречит стандарту вроде.

Цитата Сообщение от diagon Посмотреть сообщение
Да и в принципе, я не понимаю, почему нельзя создать массив в 4 гигабайта на 64битной ос, когда доступно больше 6 гигабайт (впрочем, в этом вопросе я не разбираюсь).
По тому что 6Г могут быть "не сплошными" а нужен именно сплошным куском, более того что-то ведь занято другими процессами.
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.03.2013, 18:13
Цитата Сообщение от aLarman Посмотреть сообщение
если ничего не путаю, есть определенный размер для одного процесса, видимо по этой причине
Ну так с вектором-то все ок.

Кстати, со студией я наврал - у меня тогда был интеловский компилятор(интегрированный в студию). А студийный компилятор таки выделяет нужный кусок памяти.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.03.2013, 18:20
Цитата Сообщение от diagon Посмотреть сообщение
Кстати, со студией я наврал - у меня тогда был интеловский компилятор(интегрированный в студию). А студийный компилятор таки выделяет нужный кусок памяти.
Ну значит прибабахи компилятора. Кроме того по видимому от состояния памяти/загруженности зависит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2013, 18:20
Помогаю со студенческими работами здесь

Вывести значения std::vector<std::vector<int*> >
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3; std::vector&lt;std::vector&lt;int*&gt; &gt; imatrix; ...

Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator>
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я ставлю закладку итератора, ...

Std::vector/QVector в классе или std::vector/QVector классов?
Доброе время суток! Собственно вопрос в самой теме, есть некий класс class WorkJornal { private: string manager; ...

Реализация класса MyString. Стандартная библиотека, std::string, std::vector
как добавить реализацию конкатенации строк через перегрузку оператора &quot;+=&quot; в классе MyString и почему ошибка выдается???#include...

Передача функции указатель на элемент std::vector<std::string>
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru