Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3      [все]
 что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
подозреваю, что нельзя делать .push_back() тому же вектору, который итерируешь...
он тогда segfault выплёвывает
void func()
{
    for (int num : v2)
    {
        if (num >= 20   && num <= 100)
        {
            if (rand() % 2) {v1.push_back(0);}
            else            {v2.push_back(0);}
        }
    }
}

ф-я запускается в цикле конечно
когда в векторе набирается ~1 млн, то вылетает segfault
а вот при такой постановке оно едет дальше, но тормозит с каждой итерацией и на 150 лямах уже раз в 2 секунды итерирует
но это не важно
важно - segfault из-за чего?
    void func()
    {
        vector<int> vM, vF;

        for (int num : v2)
        {
            if (num >= 20   && num <= 100)
            {
                if (rand() % 2) {vM.push_back(0);}
                else            {vF.push_back(0);}
            }
        }

        v1.insert(end(v1), begin(vM), end(vM));
        v2.insert(end(v2), begin(vF), end(vF));
    }

т.е. я тут другой вектор создаю и оттуда добавляю в этот ПОСЛЕ итерации
10 авг 19, 18:10    [21946179]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Barlone
Member

Откуда:
Сообщений: 1346
https://en.cppreference.com/w/cpp/container/vector/push_back
If the new size() is greater than capacity() then all iterators and references (including the past-the-end iterator) are invalidated. Otherwise only the past-the-end iterator is invalidated.
10 авг 19, 18:39    [21946196]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
так это же означает, что вот там было 8 эл-тов, а когда вставляют 9й, то он переделывается на 16 эл-тов
потом на 32 и т.д.
10 авг 19, 20:12    [21946230]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42848
Тут надо либо блокироваться либо версионироваться.
11 авг 19, 00:48    [21946309]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
не понял?
11 авг 19, 09:19    [21946351]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
так это же означает, что вот там было 8 эл-тов, а когда вставляют 9й, то он переделывается на 16 эл-тов

Учти что 8 исчезает и появляется 16 новых, куда копируется исходные 8. А твой цикл упирается в 9-й несуществующий, который после 8-го исчезнувшего.

PS Поизучай что такое указатели. Явно их тут нет, но "под капотом" именно они.
11 авг 19, 09:58    [21946361]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
так этим всем .push_back() занимается, где у меня цикл упирается?
11 авг 19, 10:09    [21946366]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
так этим всем .push_back() занимается, где у меня цикл упирается?

Да, v2.push_back(0)
11 авг 19, 10:19    [21946370]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
так мы в итоге пришли к тому, что
автор
подозреваю, что нельзя делать .push_back() тому же вектору, который итерируешь...

?
11 авг 19, 11:44    [21946390]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42848
полудух
не понял?

Обычно структуры данных (списки, деревья, хеш таблички) не любят модификаций.
Они перестраивают свою внутреннюю структуру когда ты что- то добавляешь или удаляешь.

Поэтому итератор по старой структуре будет сломан.
И его надо заново пересоздать.

Коробочное решение этого вопроса - это версионные структуры данных. Или запрет на работу push или итератора взаимно. По сути блокировки.

И ещё.

С точки зрения бд в примере с массивом ты хочешь фантомного чтения. Не знаю хорошо это или плохо для твоей задачи. Но надо смотреть смыслы . Может тут не массив а очередь.
11 авг 19, 14:17    [21946416]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Barlone
Member

Откуда:
Сообщений: 1346
полудух
так мы в итоге пришли к тому, что
автор
подозреваю, что нельзя делать .push_back() тому же вектору, который итерируешь...

?
Да, нельзя. А какое поведение вы ожидаете? По добавленным элементам цикл тоже должен пройти?
Вот в list например можно добавлять по ходу итерирования
11 авг 19, 14:41    [21946425]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
так ведь вектор вроде задуман так, что в конец ему добавлять можно
безо всяких "перестроек"
и замечу, что он таки растёт БЕЗ приключений до определённого момента
а потом падает
и вот причина падения конкретно в этом месте непонятна
память то ведь есть
mayton
Они перестраивают свою внутреннюю структуру когда ты что- то добавляешь или удаляешь.

таки не совсем... они же динамические
они выделяют память под определённое кол-во ячеек и ты можешь пихать в эти заготовленные ячейки новые значения
когда кол-во заканчивается, то выделяется ещё столько же (т.е. по окончании умножается на 2)
хотя конечно можно и железно прописать конкретное кол-во эл-тов, где чётко сказано, что больше не будет
но это не тот случай
11 авг 19, 15:11    [21946440]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
blonduser
Member

Откуда:
Сообщений: 132
полудух
так ведь вектор вроде задуман так, что в конец ему добавлять можно
безо всяких "перестроек"


Можно, если к элементу вектора обращаться по индексу, а не через итератор.
11 авг 19, 15:52    [21946463]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42848
полудух,

Для хеш-таблички это неверно. Да и нет у нее метода push_back.
11 авг 19, 16:01    [21946471]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
так ведь вектор вроде задуман так, что в конец ему добавлять можно
безо всяких "перестроек"
и замечу, что он таки растёт БЕЗ приключений до определённого момента
а потом падает
и вот причина падения конкретно в этом месте непонятна

Читай как устроены указатели и выделение памяти (new), тогда будет понятно. Тут никто не будет лекцию читать про базовые основы С++, для этого учебники есть.
11 авг 19, 16:36    [21946498]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
Dima T
полудух
так ведь вектор вроде задуман так, что в конец ему добавлять можно
безо всяких "перестроек"
и замечу, что он таки растёт БЕЗ приключений до определённого момента
а потом падает
и вот причина падения конкретно в этом месте непонятна

Читай как устроены указатели и выделение памяти (new), тогда будет понятно. Тут никто не будет лекцию читать про базовые основы С++, для этого учебники есть.

у меня 20 файлов с инфой про указатели, там есть всё что нужно
нечего сказать, вали мимо.
11 авг 19, 18:12    [21946545]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Barlone
Member

Откуда:
Сообщений: 1346
полудух
так ведь вектор вроде задуман так, что в конец ему добавлять можно
безо всяких "перестроек"
и замечу, что он таки растёт БЕЗ приключений до определённого момента
а потом падает
и вот причина падения конкретно в этом месте непонятна
память то ведь есть
mayton
Они перестраивают свою внутреннюю структуру когда ты что- то добавляешь или удаляешь.

таки не совсем... они же динамические
они выделяют память под определённое кол-во ячеек и ты можешь пихать в эти заготовленные ячейки новые значения
когда кол-во заканчивается, то выделяется ещё столько же (т.е. по окончании умножается на 2)
хотя конечно можно и железно прописать конкретное кол-во эл-тов, где чётко сказано, что больше не будет
но это не тот случай
Ну нельзя же увеличить ранее выделенный блок памяти. А вектор должен размещаться в непрерывном куске памяти. Так что выделяется новый блок большего размера, в него копируются значения из старого, и старый блок освобождается. А итератор продолжает указывать на освобожденный блок.
11 авг 19, 18:51    [21946558]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48594

Barlone
А итератор продолжает указывать на освобожденный блок.

Итератор - класс. Он не обязан инкапсулировать указатель, ему хватит и смещения.

Posted via ActualForum NNTP Server 1.5

11 авг 19, 19:41    [21946587]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
Dima T
пропущено...

Читай как устроены указатели и выделение памяти (new), тогда будет понятно. Тут никто не будет лекцию читать про базовые основы С++, для этого учебники есть.

у меня 20 файлов с инфой про указатели, там есть всё что нужно
нечего сказать, вали мимо.

Удачи в беге по граблям
11 авг 19, 19:47    [21946588]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
mayton
Для хеш-таблички это неверно

Не совсем: удали элемент, куда смотрит итератор и следующий будет неизвестен.
11 авг 19, 20:12    [21946598]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Barlone
Member

Откуда:
Сообщений: 1346
Dimitry Sibiryakov
Barlone
А итератор продолжает указывать на освобожденный блок.

Итератор - класс. Он не обязан инкапсулировать указатель, ему хватит и смещения.
Не обязан конечно, но может. И во многих реализациях итератор по вектору - это именно указатель. Сказано же - при реаллокации итераторы инвалидируются.
11 авг 19, 20:12    [21946599]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
Barlone
полудух
так ведь вектор вроде задуман так, что в конец ему добавлять можно
безо всяких "перестроек"
и замечу, что он таки растёт БЕЗ приключений до определённого момента
а потом падает
и вот причина падения конкретно в этом месте непонятна
память то ведь есть
пропущено...

таки не совсем... они же динамические
они выделяют память под определённое кол-во ячеек и ты можешь пихать в эти заготовленные ячейки новые значения
когда кол-во заканчивается, то выделяется ещё столько же (т.е. по окончании умножается на 2)
хотя конечно можно и железно прописать конкретное кол-во эл-тов, где чётко сказано, что больше не будет
но это не тот случай
Ну нельзя же увеличить ранее выделенный блок памяти. А вектор должен размещаться в непрерывном куске памяти. Так что выделяется новый блок большего размера, в него копируются значения из старого, и старый блок освобождается. А итератор продолжает указывать на освобожденный блок.

ну если бы в этом была проблема, он бы сразу упал, не?

Dima T
полудух
у меня 20 файлов с инфой про указатели, там есть всё что нужно
нечего сказать, вали мимо.

Удачи в беге по граблям

из тебя помощник, как из пятого колеса телега Картинка с другого сайта.
по граблям я бегать люблю и практикую
потому что без грабель ты никогда не станешь специалистом
не собрав ВСЕ ошибки ты никогда не узнаешь, что тебя ждёт, если сделать это и то
это чуть ли не главная часть учебного процесса - грабли собирать
кроме того, когда ты сам спец, ошибок поубавится, но вот молодняк рядом может под шумок угробить и тебя заодно
так что грабли рулят
не надо меня ими пугать
я не раз проходил путь с полного нуля в теме до какого-никакого спеца и знаю, что такое учёба
меня жутко бодрит сам процесс обучения, я люблю грабли
а вот что меня раздражает, так это когда некий "гуру" пытается самоутвердиться за твой счёт.
про указатели 3.14здёж
нельзя разобраться в подобной ошибке просто узнав, что такое динамическая память и чем указатель от ссылки отличается
я читал про них всё и выжимка из доков составила аж 56 кб
так что не надо мне ля-ля. Нечего сказать пройди мимо.
11 авг 19, 20:41    [21946616]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
Dima T
пропущено...

Удачи в беге по граблям

из тебя помощник, как из пятого колеса телега Картинка с другого сайта.
по граблям я бегать люблю и практикую
потому что без грабель ты никогда не станешь специалистом
не собрав ВСЕ ошибки ты никогда не узнаешь, что тебя ждёт, если сделать это и то
это чуть ли не главная часть учебного процесса - грабли собирать
кроме того, когда ты сам спец, ошибок поубавится, но вот молодняк рядом может под шумок угробить и тебя заодно
так что грабли рулят
не надо меня ими пугать
я не раз проходил путь с полного нуля в теме до какого-никакого спеца и знаю, что такое учёба
меня жутко бодрит сам процесс обучения, я люблю грабли
а вот что меня раздражает, так это когда некий "гуру" пытается самоутвердиться за твой счёт.
про указатели 3.14здёж
нельзя разобраться в подобной ошибке просто узнав, что такое динамическая память и чем указатель от ссылки отличается
я читал про них всё и выжимка из доков составила аж 56 кб
так что не надо мне ля-ля. Нечего сказать пройди мимо.

Эх, был бы ты подобрее, я бы тоже подобрее ответил. В конце концов у тебя проблема и ты не понимаешь как ее решать. С++ это не высокоуровневый ЯП, тут есть куча условностей, которые надо соблюдать, а откуда они взялись надо просто знать.

PS Рули граблями, одень каску чтоб не сильно било, искренние соболезнования твоему работодателю.
11 авг 19, 20:53    [21946626]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
нельзя разобраться в подобной ошибке просто узнав, что такое динамическая память и чем указатель от ссылки отличается

Это говорит о том что у тебя каша в голове.

Объясняю на примере: 8 орехов лежат в ячейках 260-267, в процессе пересчета добавили орех и т.к. ячейка 268 занята, то все орехи переложили в ячейки 100500-100508, дальше понятно?
11 авг 19, 21:17    [21946642]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
а вот что меня раздражает, так это когда некий "гуру" пытается самоутвердиться за твой счёт.

Извиняюсь что пытался помочь, больше не буду.
11 авг 19, 21:32    [21946644]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42848
Dima T
mayton
Для хеш-таблички это неверно

Не совсем: удали элемент, куда смотрит итератор и следующий будет неизвестен.

Я комментировал добавление нового элемента.
11 авг 19, 22:09    [21946663]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
я тоже спрошу
segfault в данном случае это fragmentation of the free store?
11 авг 19, 22:29    [21946682]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
Dima T
Эх, был бы ты подобрее, я бы тоже подобрее ответил. В конце концов у тебя проблема и ты не понимаешь как ее решать. С++ это не высокоуровневый ЯП, тут есть куча условностей, которые надо соблюдать, а откуда они взялись надо просто знать.

опять ля-ля Картинка с другого сайта.
"я бы, да кабы, если бы" - что ты обиженную девочку строишь
люди ходят на форумы, чтобы повышать квалификацию, или хотя бы дать пищу мозгу
когда они видят интересную им проблему, они разминают об неё мозги и получают с этого профит:
во1, для себя - обновлённый опыт
во2, помогли кому-то, а это + в карму и к ЧСВ
а НЕинтересные проблемы они игнорируют

но они не говорят: "я бы помог, если..."
или "вот тебе квест, иди выполняй, потом спляшешь, помоешь окна, а я подумаю..."
или "да ты нихера не шаришь, ты нуб, ты зачем вообще пытаешься разобраться, надо просто знать..."
автор
В конце концов у тебя проблема и ты не понимаешь как ее решать. С++ это не высокоуровневый ЯП, тут есть куча условностей, которые надо соблюдать, а откуда они взялись надо просто знать.

спасибо, дядь, ты лучший, открыл мне глаза наконец-то Картинка с другого сайта.

PS Рули граблями, одень каску чтоб не сильно било, искренние соболезнования твоему работодателю.

я сам работодатель.
Dima T
полудух
нельзя разобраться в подобной ошибке просто узнав, что такое динамическая память и чем указатель от ссылки отличается

Это говорит о том что у тебя каша в голове.

Объясняю на примере: 8 орехов лежат в ячейках 260-267, в процессе пересчета добавили орех и т.к. ячейка 268 занята, то все орехи переложили в ячейки 100500-100508, дальше понятно?

полудух
ну если бы в этом была проблема, он бы сразу упал, не?
12 авг 19, 10:58    [21946887]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
mini.weblab
я тоже спрошу
segfault в данном случае это fragmentation of the free store?

нет, там что-то другое, уже не помню (
что-то про 4
одну ошибку я разобрал и пофиксил - нельзя вставлять значение в ячейку вектора, которой не существует - тоже отваливается без описания ошибки
но там чё-то другое было
оно отваливалось при достижении определённого числа
12 авг 19, 11:04    [21946897]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Barlone
Member

Откуда:
Сообщений: 1346
полудух
Barlone
пропущено...
Ну нельзя же увеличить ранее выделенный блок памяти. А вектор должен размещаться в непрерывном куске памяти. Так что выделяется новый блок большего размера, в него копируются значения из старого, и старый блок освобождается. А итератор продолжает указывать на освобожденный блок.

ну если бы в этом была проблема, он бы сразу упал, не?
Не. С чего бы ему сразу падать? Память то доступна. А что в ней уже не вектор - это не сразу скажется. И вообще от реализации зависит - в какой именно код for по контейнеру компилируется...
12 авг 19, 15:21    [21947247]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42848
полудух, может тебе всё таки подойдет Queue?
12 авг 19, 15:28    [21947255]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
ну если бы в этом была проблема, он бы сразу упал, не?

Не. Не хочешь вникать в причины - не спрашивай почему упал, запомни что так нельзя делать и больше не делай.
А то что упал - это счастье, иначе бы пошел мусор на вход твоей проги и ты бы устал искать откуда мистика идет.
12 авг 19, 19:59    [21947509]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
Barlone
Память то доступна. А что в ней уже не вектор - это не сразу скажется.

хм, фигово (
вроде в цикле находимся, да и память есть, а тут UB...

mayton
полудух, может тебе всё таки подойдет Queue?

не, надо доступ по ключу
да я уже прикрутил тот второй способ
я сразу понял, что нельзя делать .push_back() тому же вектору, который итерируешь
а для понятия деталей походу надо написать пару сотен К строк
12 авг 19, 21:43    [21947544]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
mayton
Member

Откуда: loopback
Сообщений: 42848
полудух, из твоей хотелки можно сделать предположение что у тебя - конкурентный
доступ к структуре данных из 2х независимых потоков. Один хочет видеть итератор. Второй хочет добавлять
элемент. Есть миллион и маленькая тележка способов как решить твою задачу. Но я убежден
что правильный ее вариант решения на самом деле более простой. И он связан с пересмотром
алгоритма или подхода к твоей задаче. И ломать об колено итератор не нужно будет.
12 авг 19, 21:48    [21947548]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
OoCc
Member

Откуда: с Кавказа
Сообщений: 1816
полудух
не, надо доступ по ключу

Используй std::deque. Ещё и работать будет быстрее.
std::vector - дебильный контэйнер для Basic-писателей.
13 авг 19, 09:23    [21947692]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
mayton, ну я так и сделал
всем спасибо
13 авг 19, 12:45    [21947971]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2445
полудух,

Подскажи, как в векторе менять значения в функции
foor(auto i : vertices) {
i.x = 12345
.....
наа выходе из функции все теряеттсся

f(std::vector<glm::vec3> & vertices)
16 авг 19, 14:54    [21951094]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
PetroNotC Sharp
foor(auto i : vertices) {
i.x = 12345

Тут ты меняешь во временной переменной, а не в векторе. Используй ссылку
foor(auto& i : vertices) 

https://stackoverflow.com/questions/29859796/c-auto-vs-auto
16 авг 19, 15:01    [21951104]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2445
Dima T,
Блин, везде ставить))
Ты гений. Заработало)
16 авг 19, 15:05    [21951107]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
AmKad
Member

Откуда:
Сообщений: 5111
OoCc
полудух
не, надо доступ по ключу

Используй std::deque. Ещё и работать будет быстрее.
std::vector - дебильный контэйнер для Basic-писателей.
А какие преимущества у deque в ключе рассматриваемой темы?
16 авг 19, 16:13    [21951178]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2445
AmKad,
Никаких)
Если надо по ключу, то std::map вестимо.
16 авг 19, 17:01    [21951271]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
PetroNotC Sharp
AmKad,
Никаких)
Если надо по ключу, то std::map вестимо.

но он дороже вектора
и рассчитан на string в кач-ве ключей
а когда цифровые индексы, то достаточно массива, который в C++ заменён на вектор (который дешевле всего сейчас походу)
хотя я видел кто-то массивы юзает ещё...
16 авг 19, 19:09    [21951386]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
кстати, зачем пишут auto& var или auto* var ?
ведь ссылка относится к переменной
и когда позже будут вызывать var (без типа), то так: *var
16 авг 19, 19:12    [21951388]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
кстати, зачем пишут auto& var или auto* var ?
ведь ссылка относится к переменной
и когда позже будут вызывать var (без типа), то так: *var

Не, это ссылка и указатель. Разные вещи. Ты так и не почитал пару килобайт, которые у тебя есть по этой теме.
16 авг 19, 20:14    [21951411]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
Dima T, с утра прочитай ещё раз, что я спросил
внимательно
16 авг 19, 20:48    [21951425]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
кстати, вот man 2 mkdir, тут нормально:
SYNOPSIS
#include <sys/stat.h>
#include <sys/types.h>

int mkdir(const char *pathname, mode_t mode);

#include <fcntl.h> /* Definition of AT_* constants */
#include <sys/stat.h>

int mkdirat(int dirfd, const char *pathname, mode_t mode);
16 авг 19, 21:19    [21951436]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2445
полудух,
Я тоже никак не могу понять. Везде по разному.
Вроде логично знак писаить правее. К переменной.
Записывай в FAQ))
17 авг 19, 00:01    [21951552]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2445
полудух
но он дороже вектора
термин дороже надо расписать. Очень зависит от контекста. А контекст от кода рядом.
У вектора же поиск по key дольше.
А это основное назначение map.
..
Про стринг, дак это хорошо. Например, справочник аэропортов. Там ключик это 3 буквы строка.
То есть штатное использование map.
...
Массивы нехай юзают. Только их все меньше и меньше.
17 авг 19, 00:07    [21951557]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2445
полудух
хотя я видел кто-то массивы юзает ещё...

PetroNotC Sharp
Массивы нехай юзают. Только их все меньше и меньше.

//вот 10 лет назад тут был массив (указатель)
glUniform3fv (uniVec, 1, указательМассив);
// теперь тут обертка и ЯП более высокого уровня)
glUniform3fv (uniVec, 1, glm :: value_ptr (v));

https://glm.g-truc.net/0.9.2/api/a00001.html
Так что их, как и в Java будет всё меньше и меньше.
17 авг 19, 10:04    [21951628]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6382
полудух
кстати, зачем пишут auto& var или auto* var ?
ведь ссылка относится к переменной

Это просто стиль кодирования такой.
Бывают стили с обоими вариантами.
Но я например предпочитаю именно этот вариант, когда тип и все его модификаторы визуально сгруппированы, а переменная стоит отдельно. В этом стиле еще обычно есть требование объявлять только одну переменную в каждой строке, чтобы не путаться когда "int* a, b" - это объявление указателя и значения, хотя выглядит как два указателя.
17 авг 19, 16:21    [21951778]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
ну вот, т.е. стиль уже требует каких-то "особых подходов"
помимо того, что он нелогичный
17 авг 19, 18:14    [21951804]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2445
Anatoly Moskovsky
Это просто стиль кодирования такой.
Бывают стили с обоими вариантами.

Вот такое?
int *ptr;
int * ptr;
int* ptr;
Вроде вижу все варианты в сети с одинковой частотой).
Про переменную в одной строке это перебор имхо
17 авг 19, 18:36    [21951814]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
Dima T, с утра прочитай ещё раз, что я спросил
внимательно

Извини, утром некогда было ответить. Еще раз повторяю, разберись чем ссылка от указателя отличается. Кроме разного синтаксиса есть более важные нюансы. Не хочешь вникать - ограничься ссылками.
17 авг 19, 21:33    [21951857]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
PetroNotC Sharp
полудух
но он дороже вектора
термин дороже надо расписать. Очень зависит от контекста. А контекст от кода рядом.
У вектора же поиск по key дольше.
А это основное назначение map.
..
Про стринг, дак это хорошо. Например, справочник аэропортов. Там ключик это 3 буквы строка.
То есть штатное использование map.
...
Массивы нехай юзают. Только их все меньше и меньше.

vector это обертка над классическим массивом, в некоторых случаях можно прямо к массиву обращаться, и поиск по ключу там самый быстрый. Аналог из C# это List<T>
map это ассоциативный массив, причем сортированный по key, он самый тормозной. Побыстрее unordered_map, т.к. там нет сортировки, точнее сортировка по хэшу. Аналог в C# это Dictionary<T>
Но самый быстрый это vector !
17 авг 19, 21:42    [21951858]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 931
Dima T
полудух
Dima T, с утра прочитай ещё раз, что я спросил
внимательно

Извини, утром некогда было ответить. Еще раз повторяю, разберись чем ссылка от указателя отличается. Кроме разного синтаксиса есть более важные нюансы. Не хочешь вникать - ограничься ссылками.

ахаха Картинка с другого сайта.
17 авг 19, 22:00    [21951861]     Ответить | Цитировать Сообщить модератору
 Re: что не так с вектором делаю?  [new]
Dima T
Member

Откуда:
Сообщений: 14077
полудух
ахаха Картинка с другого сайта.

ГыГы
Модератор: На этой веселой ноте мы закончим


Сообщение было отредактировано: 17 авг 19, 23:17
17 авг 19, 22:03    [21951862]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / C++ Ответить