【问题标题】:Changing Arrays to Vectors将数组更改为向量
【发布时间】:2016-11-12 00:03:20
【问题描述】:

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

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 

并将其放入两个数组中。一个用于名称,一个用于数字。然后将这些数字相加并将其存储在数据数组中。现在我需要将所有数组更改为向量,我对如何做到这一点感到困惑。我知道我需要使用 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;

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

【问题讨论】:

  • 你的 C++ 书应该至少有一章解释向量是如何工作的,以及如何使用它们。我确信它有一个示例来说明如何从向量中添加或删除值。你读过那一章吗?

标签: c++ arrays vector


【解决方案1】:

您可以使用.push_back()方法将元素一一添加。

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

例如,对于您的字符串向量,您可以将fin &gt;&gt; names[i]; 更改为

string tmpString; 
fin >> tmpString; 
names.push_back(tmpString);

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

【讨论】:

  • 我正在练习使用向量,所以我想将我使用数组所做的代码更改为使用向量的代码
  • 但是,正如其他用户所说,您应该阅读书籍,他们都解释正确(可能比我好一万倍)。
【解决方案2】:

这似乎完全跑题了。但我建议您使用与 C-array 类似的 C++11 结构 std::array。对于小型和固定大小的数据(如您的样本),它是more efficient,而不是 std::vector。

【讨论】:

    【解决方案3】:

    我假设.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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      相关资源
      最近更新 更多