2017-01-10 2 views
-6

Я строю индикатор javascript для моего клиента, и они дали мне ниже код C++ из их старой системы. Раньше я никогда не делал C++. Ниже приведена часть кода на C++. То, что я хочу знать, находится в строке
if (it3 != d1Swing.end() && it3->x == h[i].x) --(it1 = it2 = it3); В чем смысл - (it1 = it2 = it3)? Как это будет выглядеть в javascript?Нужна помощь в преобразовании C++ в javascript

vector<PTPoint::PTIndexPoint> dnSwing; 
list<PTPoint::PTIndexPoint> hq, lq; 
vector<PTPoint::PTIndexPoint>::iterator it1 = d1Swing.begin(), it2 = d1Swing.begin(), it3 = ++d1Swing.begin(); 

// 
// more code here 
// 
for (int i = 0; i < period; ++i) 
{ 
    while (!hq.empty() && hq.back().y < h[i].y) hq.pop_back(); 
    hq.push_back(h[i]); 
    while (!lq.empty() && lq.back().y > l[i].y) lq.pop_back(); 
    lq.push_back(l[i]); 

    if (it3 != d1Swing.end() && it3->x == h[i].x) --(it1 = it2 = it3); 
    // 
    // more code here 
    // 
} 

// 
// more code here 
// 
p->swap(dnSwing); 

Заранее благодарен.

tslin

+1

Вы бы лучше отправьте исходный код на C++ и по отдельности попытайтесь выполнить перевод на JavaScript. –

+3

Не переводить. Вместо этого выясните, что делает код и репликация поведения с использованием функций JavaScript. – Rakete1111

+0

Спасибо всем за предложение. Я обновил свой вопрос. @ Cheersandhth.-Alf Я удалил часть javascript, поскольку это не обязательно и не связано с вопросом. – tslin

ответ

1

Это означает, что их предыдущий программист любил быть "умным".

Значение присваивания является ссылкой на объект, которому было присвоено, а присваивание присваивается справа.

--(it1 = it2 = it3) 

является

--(it1 = (it2 = it3)) 

и предназначен, чтобы присвоить значение it3 к it2 и it1, затем уменьшаем it1.
(у меня есть подозрение, что это может быть определено, что вещь, которая часто случается, когда вы лукавит в C++.)

it1 по-видимому, предназначен, чтобы быть «один шаг позади» it2.

Более разумный способ написать что

it2 = it3; 
it1 = it2 - 1; 

(В JavaScript, я подозреваю, что вам нужно работать с индексами массива, а не итераторы сделать то же самое.)

+0

Большое спасибо за ответ. Я думал, что это it1 = it2, it2 = it3, it3 - 1; Да, я буду использовать массив и индекс. – tslin