C++如何读取n行整数并存储到vector<vector<int>>容器中?
C++读取单行整数存储到二维vector的最优实现
完全不需要手动拆分字符串,用标准库的流操作就能实现安全且高效的逻辑,比strtok方案更简洁易维护,性能也更优。
完整实现代码
#include <iostream> #include <vector> #include <string> #include <sstream> using namespace std; int main() { // 可选:关闭同步大幅提升流读取速度,超大输入场景必加 ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; // 吃掉读取n后留在缓冲区的换行符,避免第一次getline读空 cin.ignore(); vector<vector<int>> vec; vec.reserve(n); // 提前分配空间减少扩容开销 while (n--) { string line; getline(cin, line); istringstream iss(line); vector<int> tmp; int num; while (iss >> num) { tmp.push_back(num); } vec.push_back(std::move(tmp)); // 移动语义避免拷贝 } // 后续处理vec的逻辑 return 0; }
方案优势
- 安全可靠:避免了
strtok线程不安全、修改原字符串、手动类型转换易出错的问题,流操作自带类型校验,异常处理更规范 - 性能优异:标准库流底层已经做过优化,加上关闭同步的配置后,性能远高于手动调用
strtok拆分的实现;提前预分配空间+移动语义也完全避免了不必要的内存拷贝 - 代码简洁:没有冗余的字符串操作逻辑,可读性高,维护成本低
内容的提问来源于stack exchange,提问作者Zeros
相关产品推荐
相关产品推荐

