C++ 有人能解释一下这些行是为了缓冲区和c字符串吗

C++ 有人能解释一下这些行是为了缓冲区和c字符串吗,c++,c++11,C++,C++11,这显然需要以如下格式读取一些数据: getline(userfile, buffer); new_user.birth_year = atoi(buffer.c_str()); for (stringstream s(buffer); s >> id;) { new_user.friends.push_back(atoi(id.c_str())); 第一个数字是用户的出生年份。后面的数字是那个人朋友的身份证号码 第一位(new_user.birth_year=atoi(

这显然需要以如下格式读取一些数据:

getline(userfile, buffer);

new_user.birth_year = atoi(buffer.c_str());

for (stringstream s(buffer); s >> id;)
{
    new_user.friends.push_back(atoi(id.c_str()));
第一个数字是用户的出生年份。后面的数字是那个人朋友的身份证号码

第一位(
new_user.birth_year=atoi(buffer.c_str());
)读取第一个数字并将其分配给
new_user.birth_year

下一个循环读取其余的数字并将它们添加到一个集合(可能是
std::vector
)中,该集合包含该用户朋友的ID。可能的小错误:它看起来像是把他们的出生年份加上了一个朋友的身份证,以及其他身份证号码

getline(用户文件、缓冲区)

将一行文本读入变量
缓冲区

new_user.birth_year=atoi(buffer.c_str())

atoi
函数需要C样式的字符串。方法
c_str()
std::string

atoi
函数将C样式的字符串转换为整数。
然后将整数结果分配给
new\u user.birth\u year

用于(字符串流s(缓冲区);s>>id;)

{

for
循环的第一部分,即
stringstreams(buffer)
,从
buffer
字符串创建字符串流。
stringstream
允许将字符串视为流

s>>id
从字符串中读取一个值,并将结果放入
id

new\u user.friends.push\u back(atoi(id.c\u str());


此行将
id
字符串转换为整数(请参见上文关于
atoi
),并将整数附加到
new\u user
对象内的向量
friends

这些行是否在一段时间后似乎会缓冲?如果是,为什么?getline(userfile,buffer);for(stringstream s(buffer);s>>id;){new_user.friends.push_back(atoi(id.c_str());}这个->users.push_back(new_user)}不,本身没有缓冲。但是,由于字符串变量的重新分配,可能会导致执行延迟。@Mar:我不确定“这些行似乎在一段时间后缓冲了吗?”是什么意思。如果你的意思是:“他们使用了缓冲读取吗?”那么是的。如果还有其他事情……好吧,也许你可以澄清一下你想知道什么。缓冲的主要原因是,从文件中进行小的读取通常会有相当大的开销,因此,与进行大量小的读取不同,你通常要进行一些大的读取,将数据放入缓冲区,然后从缓冲区中读取小块数据。
1992 17 3 34 9