C++, miért lassabb az én megoldásom, ha majdnem ugyan az?
Csináltam egy structot, hogy istream_iteratoral tudjak egész sort beolvasni de valamiért sokkal lassabb mint ez:
for(std::string s; std::getline(ist, s);)
v.push_back(s);
amit csináltam de lassú:
struct Line
{
std::string line;
friend std::istream& operator>>(std::istream &is, Line &l)
{
std::getline(is, l.line);
return is;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<Line> v{std::istream_iterator<Line>{ist}, std::istream_iterator<Line>{}};
return 0;
}
Legfeljebb csak kis eltérésnek kéne lennie szerintem.
Azért lassabb mert míg az első esetben csak egy stringet hozol létre és tárolod el minden iterációban, a második esetben létrehozol egy Line típusú objektumot, feltöltöd a stringgel és az egész Line objektumot tárolod simán csak a string helyett. Ez plusz egy lépés.
Viszont a Line objektum létrehozásának ideje elenyészőnek kéne lennie a szöveg lemezről való beolvasásához képest, ezért nem kéne hogy láss különbséget. Az utóbbi eset egyébként kicsivel több memóriát használ, és a szöveg sem közvetlenül éred el.
Csináltam egy kis tesztet, az eltérés a kettő között körülbelül 2% nálam. Ha nálad sokkal nagyobb az eltérés, lehet hogy más lesz a probléma.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!