我目前正在使用锯齿状数组,我对它们有一些问题。我的类当前读取一个txt文件,然后将该数据转换为输出文件。
注意:我的班级不使用矢量,所以请不要提供涉及它们的代码。我知道它们更有效/更简单(至少这是我读到的)但我还没达到那个水平。另外,writeJaggedArrayToFile是空的,这是因为我还没有做任何事情。
目前,我正在使用“inputF>> rowIndex>> temp>> rowLen>> temp;”访问行索引和列长度。 Temp被用作填充变量来忽略“#”。有没有办法提取数据而不创建像temp这样的变量并填充内存。我尝试用getline()创建字符串,但#不是每个数字之间的分隔符,然后我必须将数字重新转换回整数而不是字符串。
另外,我的教授给了我们几行代码,例如:
int **A = new int*[numRow];
numColumns = new int[numRow];
我不完全了解这些是如何工作的。新的int被用作指针我相信但是如何?
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
class ReadAndWriteJaggedArray {
private:
int numRow; // the number of rows in the jagged array, update this when
you read the file
int *numColumns; // the number of columns in each row of the jagged array, update this when you read the file
public:
~ReadAndWriteJaggedArray() {
delete numColumns;
}
int **fileJaggedArray() {
numRow = 0;
ifstream inputF;
inputF.open("jaggedArrayInput.txt");
if(!inputF.is_open()){
cout << "Error: Unable to open file." << endl;
exit(EXIT_FAILURE);
}
inputF >> numRow;
int **A = new int*[numRow];
numColumns = new int[numRow];
for(int i=0;i<numRow;i++){
int rowIndex;
int rowLen;
char temp;
inputF >> rowIndex >> temp >> rowLen >> temp;
numColumns[rowIndex] = rowLen;
A[rowIndex] = new int[rowLen];
for(int j=0;j<rowLen;j++){
inputF >> A[rowIndex][j];
}
}
inputF.close();
return A;
}
void writeJaggedArrayToFile(int **A) {
}
};
int main() {
ReadAndWriteJaggedArray jaf;
int **jaggedArray = jaf.fileJaggedArray();
jaf.writeJaggedArrayToFile(jaggedArray);
delete jaggedArray;
return 0;
}
我正在使用的文本文件:
6
0 # 3 # 5 7 1
1 # 2 # -14 9
2 # 4 # 9 1 0 4
3 # 1 # -27
4 # 5 # 9 10 -7 45 12
5 # 4 # 99 1 14 -881
答案 0 :(得分:-1)
以下是处理锯齿状数据的更为范式化方法的快速示例。
请注意,每列的大小都存储在实际的std::vectors
中。而不是非范例和容易出错的C方式保持容器(指针)与预期大小同步。
#include <vector>
#include <iostream>
std::vector<std::vector<int>> jagged_data;
int main()
{
auto rows = 9;
for (auto row = 0; row < rows; ++row)
{
jagged_data.push_back(std::vector<int>());
jagged_data[row].resize(row, row);
}
jagged_data.back().resize(4);//mess up the last one as an example.
for (const auto& row : jagged_data)
{
for (const auto& data_at_column : row)
{
std::cout << data_at_column << " ";
}
std::cout << std::endl;
}
return 0;
}
打印
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
6 6 6 6 6 6
7 7 7 7 7 7 7
8 8 8 8