Я пишу программу для уравновешивания химических уравнений. Программа работает, беря строку уравнения, разбивая ее на std :: vector с размером двух на основе знака равенства, затем анализирует левую сторону separatedEquation[0]
и правую сторону separatedEquation[1]
в другой набор std :: vector leftHalf и rightHalf соответственно.Назначить std :: векторный адрес другого std :: vector
Проблема
У меня есть функция Equation :: filterEquation, который анализирует separatedEquation
для имен элементов. Я хочу использовать временный вектор, указывающий на адрес либо leftHalf, либо rightHalf. Я знаю, что это, вероятно, сбивает с толку, но вот мой код и то, что я пытаюсь сделать. Я думаю, мне нужно использовать указатели, но мне никогда не приходилось использовать указатели раньше и неэффективны с ними.
void Equation::filterEquation()
{
for(int i=0; i<separatedEquation.size(); i++) //i = index of separated equation
{
int index=0;
std::vector<std::string> equationHalf;
if(i==0)
equationHalf = leftHalf; //set equationHalf to the address of leftHalf
if(i==1)
equationHalf = rightHalf; //set equationHalf to the address of rightHalf
for (std::string::iterator it = separatedEquation[i].begin(); it!=separatedEquation[i].end(); ++it, index++)
{
//Elements are set up so that He = Helium, while H = Hydrogen. This separates the elements based upon upper and lowercae
bool UPPER_LETTER = isupper(separatedEquation[i][index]); //true if character is upperCase
bool NEXT_LOWER_LETTER = islower(separatedEquation[i][index+1]); //true if next is lowerCase
if (UPPER_LETTER)// if the character is an uppercase letter
{
if (NEXT_LOWER_LETTER)
{
std::string temp = separatedEquation[i].substr(index, 2);//add THIS capital and next lowercase
equationHalf.push_back(temp); // add temp to vector
}
else if (UPPER_LETTER && !NEXT_LOWER_LETTER) //used to try and prevent number from getting in
{
std::string temp = separatedEquation[i].substr(index, i);
equationHalf.push_back(temp);
}
}
}
}
}
Два оператора 'if', которые перегружают' equationHalf' в начале сегмента кода, кажется неправильным. – sircodesalot
@sircodesalot Я знаю, но я не могу придумать другого способа сделать это. У меня были два оператора if, настроенные таким образом: 'if (i == 0) {leftHalf.doSomething()}' и 'if (i == 1) {rightHalf.doSomething()}. Я думал, что вместо этого можно переопределить адрес уравненияHalf. – Crysis
Хорошо, что вы написали, возможно, не так, потому что либо 'equationHalf' всегда будет * быть' rightHalf' ('if i == 0'), либо ничего не будет (если' i! = 0 '). – sircodesalot