Splitting and storing config file lines I wrote the following code to read a config file line by line and split each line into 2 parts and store them separately.  The split is done on the basis of a delimiter =:

std::ifstream configfile(path_string.c_str());
std::string line;

std::vector&lt;std::string&gt; linesOfConfigFile;
while (std::getline(configfile, line))
    linesOfConfigFile.push_back(line);

configfile.close();

std::string currentItem;
char delimeter = '=';

std::vector&lt;std::string&gt; RHS;
std::vector&lt;long long&gt; LHS;

bool flag = false;
for (int i =0; i&lt;linesOfConfigFile.size(); i++)
{
    std::stringstream singleLine(linesOfConfigFile[i]);

    while(std::getline(singleLine, currentItem, delimeter))
    {
        if(flag == true) 
        {
            RHS.push_back(currentItem);
            flag = false;
        }
        else if (flag == false)
        {
            long long orderbookId = 0;
            &lt;some library class&gt;::toNumeric(currentItem, orderbookId);
            LHS.push_back(orderbookId);
            flag = true;
        }
    }
}

for(int i=0; i&lt;RHS.size(); i++)
    StorageMap.insert( std::pair&lt;long long, std::string&gt;( LHS[i], RHS[i]) );


The review comment I got was this: 


  The below code can be written in a better way, Need not use a Boolean flag to differentiate RHS and LHS. The outer for loops should be sufficient. 


I cannot understand what difference he wishes to have. Can someone please help me?
I wrote the following code to read a config file line by line and split each line into 2 parts and store them separately.


So there are two parts on each line, the stuff before the =, which is stored as a string, and the stuff after the =, which shall be parsed as an integer and stored as a long long.

Thus you can handle each line on its own completely, without using a flag to determine at which part of the line you currently are:

for (int i =0; i&lt;linesOfConfigFile.size(); i++)
{
    std::stringstream singleLine(linesOfConfigFile[i]);

    // get first part of the line
    std::getline(singleLine, currentItem, delimeter);
    // store it
    RHS.push_back(currentItem);

    // Now get the next part of the line
    std::getline(singleLine, currentItem, delimeter);
    // parse it
    long long orderbookId = 0;
    &lt;some library class&gt;::toNumeric(currentItem, orderbookId);
    // and store the result
    LHS.push_back(orderbookId);

    // done with this line :D
}


This supposes of course that the config file is well-formed, and the format requires that each name = value is on a separate line.

If the config file is malformed, or the file format is not as simple, this version may fail where yours wouldn't (for example

name =
value


would work with yours), but neither version does robust error handling, and both would fail on most malformed inputs. Config files can generally be assumed to follow the required format, so the absence of error handling probably isn't a serious problem.