矢量读取特定行
Posted
技术标签:
【中文标题】矢量读取特定行【英文标题】:vector read specific lines 【发布时间】:2012-09-08 05:33:04 【问题描述】:我有一个文本文件,其中包含节目名称和出演者的名称。
我需要在一个类中创建一个向量,我可以在其中输入演员并输出电影。
但我不想将整个条目读入向量中以节省内存。
我怎样才能做到这一点,以便我可以阅读包含以下内容的 txt 文件,然后找到演员姓名,例如 Min, Jun So
它会找到这两个实例,然后将两部电影读入向量并输出它?
也许一个可以做到这一点的代码布局会很棒。只是为了让我开始。
Min, Elia
Starlight Inn (2010) [Skyler] <4>
Min, Jun So
"Joseon X-Files - Secret Book" (2010) Ghosts of Yidu (#1.6) [Choi Eui Shin] <5>
Min, Jung So
"Mischievous Kiss" (2010) [Oh Ha Ni]
Min, Xiao
Little Sister (2010) [Mei Mei] <2>
【问题讨论】:
您确定要在选择所需行之前阅读整个文件吗?您可以遍历文件,即时找到这些行。您还可以解释这个问题与your last one 的关系。 我只是不确定如何编码。那是我的问题。 那个文件有多大?扫描文件比将所有名称放入std::map
并使用它进行搜索要慢很多。
我无法将整个文件加载到内存中。这就是问题所在。该文件为 15mb
你知道如何读取整个文件并逐行打印出来,而不是一次在内存中保存超过几行吗?
【参考方案1】:
试试这个示例代码:
#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
std::ifstream file( "test.txt" ) ;
std::string search_str = "Elia" ;
std::string line ;
int line_number = 0 ;
std::vector<string> finds;
finds.resize(100);
while( std::getline( file, line ) )
++line_number ;
if( line.find(search_str) != std::string::npos )
std::cout << "line " << line_number << ": " << line << '\n' ;
finds.push_back(line);
std::getline( file, line );
finds.push_back(line);
for (int i=0;i<finds.size();i++)
std::cout<<finds[i]<<"\n";
return 0;
输入:Elia
输出:
Min, Elia
Starlight Inn (2010) [Skyler] <4>
Press any key to continue
【讨论】:
为什么是finds.resize(100)
?也许你的意思是finds.reserve(100)
?
resize() 分配内存并创建所需数量的实例但是 reserve() 只分配内存,它不创建实例。
当你想要索引向量时通常使用resize
,如果你将使用push_back
(后者自己在向量内创建实例),则通常使用reserve
。现在前面有 100 个无用的空字符串,只是在打印出向量时看不到它们。以上是关于矢量读取特定行的主要内容,如果未能解决你的问题,请参考以下文章