Also das mit dem i ist schonmal ziemlicher Schwachsinn, geht viel einfacher:
poly = (Summe % base_neu); // 9%2 = Rest 1 -> neue zahl beginnt mit 1^x
wert = (Summe / base_neu); // z.B. 4 = 9/
while (wert!=0) // Wenn Wert == 0, ist die Zahl komplett berechnet worden.
{
poly = (wert % base_neu); // 4%2 = 2 Rest 0 -> nächste zahl 0^(x-1)
wert = (wert / base_neu); // 2=4/2
//nächster Durchlauf:
// 2%2 = 1 Rest 0 -> nächste zahl 0^(x-2)
// 1=2/2
//nächst Durchlauf;
// 1%2 = 0 Rest 1-> nächste zahl 1^(x-3)
// 0 = 1/2 (da nur Ganzzahl möglich)
// Zahl 1001 [lauf] lauf++ Zahl richtige Reihnfolge
}
Alles anzeigen
Der macht dann einfach erst das, wo du mit dem i abgefragt hast, und dann das normale. Also bei so einfachen Dingen, wo nur ein einziges Mal die eine Bedingung ausgeführt werden soll, macht es keinen Sinn über eine Variable zu bestimmen, welche alternative Block ausgeführt werden soll.
Zweite Sache: Brauchst du überhaupt ein Array oder einen Vektor? Eigentlich nicht, du kannst auch direkt das Ergebnis in einen String schreiben.
string int2poly(int Summe, int base_neu)
{
string poly;
...
return poly;
}
Wenn du Poly berechnest, musst du einfach den Wert in den String hineinpacken, anhängen geht sowohl bei strings als auch bei vector mit push_back, da der Euklidische Algorithmus jedoch die Stellen umgekehrt liefert, musst du push_front verwenden, also:
poly.push_front(int2charvalue(wert % base_neu));
Versuch selbst herauszufinden, wie du das einbaust. 
Die Sache mit dem return:
Wenn du return aufrufst, wird die Funktion sofort verlassen und der Ausdruck hinter return als Rückgabe behandelt. Code, der hinter return folgt, wird nicht mehr ausgeführt (es sei denn das return ist in einem nicht zutreffenden if-Block o. ä.), das heißt, dass dein "return 0;" keinen Sinn mehr macht. Du bist das wahrscheinlich aus main gewohnt, damit gibt man ans System den Wert 0 zurück, um eine erfolgreiche Programmausführung anzuzeigen. (Wenn z. B. abort aufgerufen wird, ist die Rückgabe wahrscheinlich nicht 0). return ist keine Funktion, deshalb braucht man die Klammern auch nicht, andererseits können sie nicht schaden. 
Theme vector: Du kannst einen vector oft genauso behandeln wie ein array:
vector<int> feld; // In < > der Typ, der gespeichert wird, feld ist leer
vector<string> feld2(32, "hi"); // feld2 hat die Länge 32 und enthält 32 mal den string "hi"
int x;
cin >> x;
feld.push_back(x); // Anhängen, auf Arrays nicht möglich
cout << feld[0] << endl; // geht genauso wie beim Array
cout << feld2[2] << feld[3] << feld[4] << endl; // Ausgabe hihihi
Mit strings kannst du auch die Operationen machen und außerdem genauso wie bei C-Strings.
Viele liebe Grüße
The User
PS: Das int2charvalue stimmt nicht ganz 