You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何每3行向pair构成的vector中添加元素,getline可否读后续行

getline的访问特性

std::getline本身没有提供类似数组下标偏移的直接访问能力,它是流式读取接口,每次调用只会从输入流的当前位置读取一行内容,读取完成后流的读取指针自动后移到下一行开头,无法跳过中间行直接读取指定位置的行。

实现方案

你现在已经在使用的先把全量文本行读入vector再随机访问是最通用、易维护的方案,对于绝大多数场景都适用,你要生成两组pair的vector可以直接基于已经读好的vector_of_text实现:

#include <vector>
#include <string>
#include <fstream>
#include <utility> // pair头文件

using namespace std;

int main() {
    vector<string> vector_of_text;
    string line_of_text;
    ifstream test_file("test.txt");

    if(test_file.is_open()){
        while(getline(test_file, line_of_text)){
            vector_of_text.push_back(line_of_text); // 注意你原代码这里漏了分号
        }
        test_file.close();
    }

    // 生成你需要的两组pair vector
    vector<pair<string, string>> pair1_vec, pair2_vec;
    // 确认行数足够再访问,避免越界
    if (vector_of_text.size() >= 3) {
        pair1_vec.emplace_back(vector_of_text[0], vector_of_text[1]); // line1+line2
        pair2_vec.emplace_back(vector_of_text[0], vector_of_text[2]); // line1+line3
    }

    return 0;
}

如果你遇到文件极大、不想把所有内容都加载进内存的特殊场景,也可以手动暂存需要复用的行,边读边生成pair:

vector<pair<string, string>> pair1_vec, pair2_vec;
string line1, line;
ifstream test_file("test.txt");

if (test_file.is_open()) {
    // 先读第一行存好
    if (getline(test_file, line1)) {
        // 读第二行,和line1组成第一组pair
        if (getline(test_file, line)) {
            pair1_vec.emplace_back(line1, line);
        }
        // 读第三行,和line1组成第二组pair
        if (getline(test_file, line)) {
            pair2_vec.emplace_back(line1, line);
        }
    }
    test_file.close();
}

内容的提问来源于stack exchange,提问作者rrekaF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 02:30:03