C++ 从文件中读取成对的数据

C++ 从文件中读取成对的数据,c++,vector,std-pair,C++,Vector,Std Pair,我正在尝试使用以下代码从文件中读取成对的数据 #include <iostream> #include <fstream> #include <vector> using namespace std; int main() { //**** Opening data file **** ifstream infile; infile.open("reg_data_log.inp"); if (infile.is_open

我正在尝试使用以下代码从文件中读取成对的数据

#include <iostream>
#include <fstream>
#include <vector>


using namespace std;

int main()
{
//**** Opening data file ****   

    ifstream infile;
    infile.open("reg_data_log.inp");

    if (infile.is_open())
    {
        cout << "File successfully open" << endl;

    }
    else
    {
    cout << "Error opening file";
    }

//**** Reading data ***

    vector<pair<double, double> > proteins;

    pair<double, double> input;

    while (infile >> input.first >> input.second) 
    {
        proteins.push_back(input);
    }

//**** Show data in screen ****

    cout << "Proteins analized: " << proteins.size() << endl;

    for(unsigned int i=0; i<proteins.size(); i++)
    {
        cout << i.first << ", " << i.second << endl;
    }

}
#包括
#包括
#包括
使用名称空间std;
int main()
{
//****正在打开数据文件****
河流充填;
填充打开(“reg_data_log.inp”);
if(infle.is_open())
{
cout>输入(秒)
{
蛋白质。推回(输入);
}
//****在屏幕上显示数据****

不能进一步观察你的循环吗

for(unsigned int i=0; i<proteins.size(); i++)
{
    cout << i.first << ", " << i.second << endl;
}
现在,您得到的是向量中的元素,而不是整数。您现在可以访问
第一个
第二个

如果不能使用基于范围的for循环和
auto
,则可以使用旧的迭代器for循环方式

for(vector<pair<double, double> >::iterator it = proteins.begin();
    it != proteins.end();
    ++it)
{
    cout << it->first << ", " << it->second << endl;
}
for(vector::iterator it=proteins.begin();
它!=蛋白质。结束();
++(it)
{
cout first正如他在评论中所提到的,实际上您引用的是int而不是pair类型。下面的循环很可能会解决您的问题:

cout << "Proteins analized: " << proteins.size() << endl;

for(unsigned int i=0; i<proteins.size(); i++)
{
    cout << proteins[i].first << ", " << proteins[i].second << endl;
}

cout错误很明显。你在最后一个循环中使用
i
。它是一个
int
。但是你尝试先访问
i.first
。你需要使用迭代器。例如:
for(auto i:proteins){迭代器能否给我一个编译器错误63:7:警告:“auto”改变了C++11中的含义;请删除它[-Wc++0x]@berkboy您使用的是c++11之前的编译器吗?re.“自动”更改的意思是:升级您的编译器或使用编译标志(如果版本非常旧,则可能是
-std=c++0x
)。谢谢您的解释。我看到了我的错误。
cout << "Proteins analized: " << proteins.size() << endl;

for(unsigned int i=0; i<proteins.size(); i++)
{
    cout << proteins[i].first << ", " << proteins[i].second << endl;
}