iw4nna.rock
> Просто вы не видели.
Ну и слава богу :)
iw4nna.rock
> цвет назвали vec4 (или float4)
Так vec или float? Это не одно и то же.
totoro
> Вектор, если что -это математический объект.
а я хотел сказать направление...
но да, в математике пишется что это объект, указывающий направление и имеющий свою длину.
monobogdan
> Гпу - не процессор общего назначения, он "мыслит" сразу векторами.
Уже лет 15 как не мыслит.
totoro
> И тут Остапа понесло… Вектор, если что -это математический объект.
В этом смысле, любой тензор — это вектор, потому что их можно собирать в линейные комбинации.
Mirrel
Вектор, в зависимости от контекста, определяет разные объекты:
1. Объект математики (vec2d, vec3d)
2. Объект-множество (std::vector, SIMD)
Имбирная Ведьмочка
> В этом смысле, любой тензор — это вектор
В википедии написано, что это векторы.
totoro
> В википедии написано, что это векторы.
https://ru.wikipedia.org/wiki/Векторное_пространство#Определение
Имбирная Ведьмочка
> https://ru.wikipedia.org/wiki/Векторное_пространство#Определение
Зачем это? Обычно мне не нужно погружаться в математические дебри, для того чтобы написать хорошо структурированный код, достаточно общих определений. Научные изыскания оставим математикам.
totoro
> 2. Объект-множество (std::vector, SIMD)
В С++ то, что называется std::vector на самом деле должно быть std::array, а то, что называется std::array - должно быть std::vector. Но это С++, и неадекватного нейминга там полно.
MrShoor
> В С++ то, что называется std::vector на самом деле должно быть std::array, а то, что называется std::array - должно быть std::vector. Но это С++, и неадекватного нейминга там полно.
>
>
Окей, чатГПТ
В C++ `std::vector` и `std::array` имеют разные цели и предназначены для различных случаев использования, что и объясняет их разделение. Вот основные различия между ними:
1. **Размер**:
- `std::array`: Это контейнер фиксированного размера, который задается во время компиляции. Размер массива не может изменяться после создания.
- `std::vector`: Это контейнер динамического размера, который может изменяться в процессе выполнения программы. Вы можете добавлять или удалять элементы, и вектор автоматически управляет своей памятью.
2. **Производительность**:
- `std::array`: Так как размер фиксированный, доступ к элементам происходит очень быстро и с минимальными накладными расходами. Также он может быть размещен на стеке.
- `std::vector`: Из-за динамического управления памятью могут быть накладные расходы на выделение и освобождение памяти, а также на возможные перераспределения памяти, если вектор растет.
3. **Использование памяти**:
- `std::array`: Размер массива компилируется в программу, и память под элементы выделяется сразу.
- `std::vector`: Память выделяется динамически, и вектор может выделять больше памяти, чем фактически используется, чтобы уменьшить накладные расходы на выделение при добавлении элементов.
4. **Flexibility**:
- `std::array`: Имеет фиксированное количество элементов, что делает его полезным в ситуациях, когда вам нужно заранее знать количество элементов (например, для работы с матрицами фиксированного размера).
- `std::vector`: Предоставляет гибкость в управлении количеством элементов, что делает его более подходящим для случаев, когда размер данных может изменяться.
В общем, выбор между `std::array` и `std::vector` зависит от ваших конкретных требований к производительности и удобству использования.
0iStalker
> Окей, чатГПТ
>
> В C++ `std::vector` и `std::array` имеют разные цели и предназначены для различных случаев использования, что и объясняет их разделение. Вот основные различия между ними
Я прекрасно знаю различия. И именно поэтому и говорю, что std::vector и std::array было бы логичнее поменять местами.
Где например ты видел, чтобы вектора меняли свою размерность на лету? Ну кроме С++
MrShoor
> Ну кроме С++
Жаба и шарп/дотнет :)
Dmitry_Milk
> Жаба и шарп/дотнет :)
В жабе не знаю, а в дотнете - нет, вектор не может менять свой размер
MrShoor
> В С++ то, что называется std::vector на самом деле должно быть std::array
В плюсах вектор по аналогии с дотнетом должен называться ArrayList, а лист - LinkedList, std::array в идеале просто должен враппить массивы и предоставлять обертки над realloc, безопасного memcpy и т.п.
А нейминг дотнета действительно замечательный :)
monobogdan
> А нейминг дотнета действительно замечательный :)
Он конечно лучше чем в С++, но далеко не замечательный.
Вот представь, что ты впервые смотришь List<T>. Какие у тебя мысли? У меня лично первая мысль - это Linked List. Но со связанным списком он не имеет ничего общего.
Или Dictionary. Под капотом это хешмапа, но по неймингу этого не видно. Вдруг это бинарное дерево?
Я лично считаю, что если вы фиксируете реализацию, то это надо отражать в нейминге.
List -> DynArray
Dictionary -> HashMap
PriorityQueue -> BinHeap
SortedDictionary -> BinTree
MrShoor
С такой точки зрения лучше всего в Java. Там List изначально абстрактный, от которого наследуется уже ArrayList и LinkedList. Тоже самое с словарями.