1. If the file is never edited externally with plain text editors, then you can use binary file instead. You can still store text data in it, but you can index it, or create data structure inside the file, etc. Then again, this is a bit like creating a small database engine, so it is not very productive.
2. You can use the ignore method of istream with delim = '\n'. This allows you to skip a single line. Calling ignore several times in this manner will allow you to skip arbitrary number of lines. This is slow. But then again text files are nothing more then one big string formed from appending the lines of text together. There is no information to tell you where one line ends and another begins, so seeking to arbitrary line can never be fast.
(http://www.cplusplus.com/reference/iostream/istream/ignore/)
3. You can create a vector (or deque) that holds the positions of lines in the file. You can fill it incrementally, sort of like cache, or you can fill it to the brim with one pass of the entire file on program start-up. In either case, you will first move from line to line with the ignore method mentioned above, but then use tellg to remember the current position and consequently reload that position when you have to move to the line again.
(http://www.cplusplus.com/reference/iostream/istream/tellg/)