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

Откуда: loopback
Сообщений: 42936
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Откуда:
Сообщений: 14098
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

Откуда:
Сообщений: 2478
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

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

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

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

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

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

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

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

Откуда: планета орков, г.Зверополис
Сообщений: 946
кстати, вот 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

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

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

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

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
Сообщений: 6384
полудух
кстати, зачем пишут auto& var или auto* var ?
ведь ссылка относится к переменной

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