跪求大侠分析 istringstream 跟 getline 实现切分字符串的原理

跪求大侠分析 istringstream 和 getline 实现切分字符串的原理
int main() {
      std::vector<std::string> strings;
      std::istringstream f("denmark;sweden;india;us");
      std::string s; 
      while (std::getline(f, s, ';')) {
            std::cout << s << std::endl;
            strings.push_back(s);
      }
}

strings 容器里面的四个单词是怎么样被切分存进去的?
------解决思路----------------------

#include<vector>
#include<iostream>
#include <string>
using namespace std;

int main(void)
{
vector<string> strings;
char data[] = "denmark;sweden;india;us";
int len = strlen(data);

char *begin = data;
for (int i = 0; i < len; i++)
{
if (data[i] == ';')
{
strings.push_back(string(begin, &data[i]));
begin = &data[i + 1];
}
}
strings.push_back(begin);

for (size_t i = 0; i < strings.size(); i ++)
{
cout << strings[i] << endl;
}
}


实现方法有很多,比如可以写个for循环一发现';'字符就把子字符串截取出来,如果借助C程序库中的strtok或C++标准库中的string::find()等更方便,当然getline不一定是这样实现的,但是基本思路都是一样的。