PDA

Просмотр полной версии : Переход с массивов на векторы


a7s1h1
19.12.2013, 12:04
Часто встречав советы по использованию векторов вместо массивов для увеличения производительности решил перейти с массивов на векторы.
Заметил, что манипуляции с векторами, по сравнению с массивами, - это страшный геморрой:
Создать новый массив: var ar:Array=[]
Создать новый вектор: var v:Vector.<uint>=new Vector.<uint>();
Создать новый массив с заданными значениями элементов: var ar:Array=[1,2,3]
Создать новый вектор с заданными значениями элементов: var v:Vector.<uint>=new <uint>[1,2,3];

Ладно, с созданием можно смириться, код печатать пальцы не отсохнут, но перейдём к обнулению. Как замечательно и лакончино всё делается с массивом:
ar=[],
и в четыре раз длиннее код для вектора:
v=new Vector.<uint>(), при том, что меня терзают сомнения в том, что это лучший способ обнуления вектора.

Идею двумерных векторов я и подавно оставил - там, где, используя массив, можно было лакончино написать ar=[[],[],[]], для вектора приходится строчить целый роман!

Всё моё нытьё, видимо, с непривычки и от незнания, хотя почитал справку, форум, попробовал на практике. Поэтому посоветуйте, пожалуйста, есть ли способы такого же лаконичного объявления и обнуления векторов, как в случае с массивами?

Dukobpa3
19.12.2013, 12:18
Присвоение нового массива это не обнуление.
arr.length = 0;
while(arr.length) arr.pop();
Вот варианты обнуления.

Я вам больше скажу - в вектор нельзя пихать разнородные данные, только однонтипные. Так что это совсем страшная штука, не надо их использовать ;)

a7s1h1
19.12.2013, 12:32
Присвоение нового массива это не обнуление.
arr.length = 0;

я неточно выразился. мне нужно было обнуление старого и создание нового пустого массива, а это, как я понимаю, всё-таки arr=[]. Правда, я не знаю, куда при этом девается старый массив, я думал, что он как раз стирается. Буду признателен за пояснение этого нюанса.

в вектор нельзя пихать разнородные данные, только однонтипные. Так что это совсем страшная штука, не надо их использовать ;)
Насчёт этого я в курсе. Но массивов с разнородными данными у меня нет. Есть только двумерные массивы типа
[[Object1,Objec2],[Object3,Objec4],[Object5,Objec6]], но для вектора это всё равно каша типа Vector.<Vector.<Object>> - с этим я голову ломаю до сих пор.

Dukobpa3
19.12.2013, 12:34
Vector.<Vector.<Object>>
С этим ломать голову не надо. Этого просто не нужно делать.
Вектор быстрее работает только с типизированными данными. Если пихать в него нетипизированный обжект то а в чем смысл?

Добавлено через 4 минуты
я не знаю, куда при этом девается старый массив
Если на него были другие ссылки - никуда не девается, висит в памяти. Если не было - удалится мусорщиком.
Так как вы показали в самом начале это не зануление массива, а зануление одной текущей ссылки.

toFL
19.12.2013, 12:53
Если пихать в него не типизированный объект то а в чем смысл?

Вектор принадлежит к числу плотных массивов.
Вектор может иметь фиксированную длину

Psycho Tiger
19.12.2013, 17:08
Не задуряйтесь. Вектор не даст Вам той производительности, о которой Вы думаете. Пишите код так, чтобы Вам хорошо было. Вам же с ним работать.

Akopalipsis
19.12.2013, 17:26
я тоже раньше думал, что вектор даст прирост производительности, но сейчас склоняюсь к ассоциативным + к классам с одними значениями.

alatar
19.12.2013, 17:40
я тоже раньше думал, что вектор даст прирост производительности, но сейчас склоняюсь к ассоциативным + к классам с одними значениями.
Я раньше использовал вилку и нож, а сейчас склоняюсь к ложке + палочки.

Akopalipsis
19.12.2013, 17:55
Я раньше использовал вилку и нож, а сейчас склоняюсь к ложке + палочки.
Не понимаю к чему Вы это написали, но если Вы нож можете заменить палочками, то наверное Вы нинзя.
А ещё наверное забыли, что когда то, когда ещё не понимали разницы между массивом и вектором, пытались всё засунуть в массивы и использовать их везде. И вот если у ТС похожая проблема, то я и сказал, что тоже так думал, но это не так. Если я раньше думал, что в массивы нужно сувать всё, то теперь даже не знаю в каких случаях вектор даст прирост производительности. Наверное, если в него нужно положить миллион элементов, то тогда его стоит использовать.

alatar
19.12.2013, 18:22
Это я написал к тому, что вы сравниваете применимость теплого, мягкого и зеленого.