将数组更改为向量

时间:2016-11-12 00:03:20

标签: c++ arrays vector

我写了一些代码,程序从文件中读取信息(这里是文件)

5 
Franks,Tom 2 3 8 3 6 3 5 
Gates,Bill 8 8 3 0 8 2 0 
Jordan,Michael 9 10 4 7 0 0 0 
Bush,George  5 6 5 6 5 6 5 
Heinke,Lonnie  7 3 8 7 2 5 7 

并将其放入两个数组中。一个用于名称,一个用于数字。然后总计数字并将其存储在数据数组中。现在我需要将所有数组更改为Vectors,我对如何做到这一点很困惑。我知道我需要使用push_back,但我对如何开始感到困惑。

这是包含数组的代码:

int data[50][8];
string names[50];    

int const TTL_HRS = 7;
ifstream fin;
fin.open("empdata.txt");

if (fin.fail()) {
    cout << "ERROR";
}

int sum = 0;
int numOfNames;
fin >> numOfNames;

for (int i = 0; i < numOfNames; i++) {

    fin >> names[i];

    data[i][7] = 0;

    for (int j = 0; j < 7; j++) {
        fin >> data[i][j];
        data[i][TTL_HRS] += data[i][j];
    }
}

fin.close();
return numOfNames;

}

我知道我必须制作数组向量。所以我会

vector<vector<int>>data;

 vector<string>names;

但我不确定如何填写它们。

3 个答案:

答案 0 :(得分:0)

您可以使用getNews().from() .flatmap(new Func1<1stResponseItem, 2dnResponseItem>() { @Override public 2dnResponseItem call(1stResponseItem response) { return getNewsImage(response.getImageUrl()); } }) .tolist() 方法逐个添加元素。

顺便说一下,我很好奇,为什么你想要向量而不是数组呢?

例如,对于字符串向量,您可以按

更改.push_back()
fin >> names[i];

可能(可能)有更好的方法可以做到这一点,但这就是我的看法。

答案 1 :(得分:0)

看起来很不合适。但我建议你使用与C-array类似的C ++ 11结构std::array。对于小型和固定大小的数据(如您的样本),它比std :: vector more efficient

答案 2 :(得分:0)

我假设.txt文件有这个:

Franks Tom 2 3 8 3 6 3 5

解决您问题的基本解决方案。

int main(int argc, const char * argv[]) {
        vector <int> numbers;
        vector <string> names;
        string line, name1, name2;
        int num[7];


        ifstream fin("/empdata.txt");


        if (!fin.is_open()) {
            cout << "ERROR";
        }
        else{

            while(getline(fin, line)){
                istringstream is(line);

                is >> name1;
                is >> name2;
                for(int i=0; i<7; i++){
                    is >> num[i];
                }
                names.push_back(name1);
                names.push_back(name2);

                for(int i=0; i<7 ; i++){
                    numbers.push_back(num[i]);
                }

            }
            fin.close();
        }
        //Printing what did you read from a file
        string allNames;
        for(auto it = names.begin(); it < names.end(); it++){
            allNames += (*it) + "\t";
        }
        cout << allNames << endl;

        for (auto it = numbers.begin(); it < numbers.end(); it ++){
            cout << (*it) << "\t";
        }

        return 0;
    }