Utknąłem w zadaniach domowych. Muszę odczytać tekst z pliku, przydzielić każde słowo do pamięci, a następnie wskazać użytkownikowi wskaźnik, aby wysłać go do vector<string*>
. Mój program nadpisuje wektor nowym słowem z pliku zamiast go tylko dodawać. Nie rozumiem, dlaczego tak się dzieje.Wektor w C++ ze wskaźnikiem
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
void WordFunctions(string *pstr, vector<string*> &words)
{
words.push_back(pstr);
}
int main(){
ifstream file;
vector<string*> a;
string word;
int w =0;
file.open("word.txt");
while (!file.eof())
{
w++;
file >> word;
WordFunctions(&word, a);
}
file.close();
for (int i=0;i<10;i++){
cout<<(*a[i])<<" ";
delete a[i];
}
system ("pause");
}
Rany .. Twoje zadanie faktycznie zmusza cię do użycia wektora wskaźników i nie wyjaśnia, dlaczego jest to okropny pomysł? Tak, jak wiesz, masz teraz obowiązek ręcznego zwolnienia każdego elementu w twoim wektorze, negując ogromną korzyść, którą daje ci wektor. * czasami * musisz przechowywać wskaźniki w wektorze (nie często!) iw takim przypadku użyjesz inteligentnego wskaźnika, tj. 'unique_ptr' lub czegoś podobnego. Pamiętaj, aby powiedzieć o tym swojemu nauczycielowi, gdy następnym razem go zobaczysz. –