我已经生成了一个data.txt文件,其中包含大量的整数到两列。
如何将这些整数保存到数组中?
如果有帮助,您可以找到data.txt here。样品:
600000
523887 283708
231749 419866
293707 273512
296065 215334
233447 207124
264381 460210
374915 262848
449017 329022
374111 151212
2933 496970
我试过这个,但由于某种原因它不起作用..
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
fstream input("data-for-union-find.txt");
int i=0;
float a;
int size=0;
size=i/2;
while (input >> a)
{i++;
}
int *x=new int[size];
int *y=new int[size+1];
for(int j=0;j<(size+1);j++)
{
input>>x[j];
input>>y[j];
cout<<x[j]<<" "<<y[j]<<" "<<j<<endl;
return 0;
}
}
答案 0 :(得分:2)
要向数组添加更多元素,超出其容量,您必须:
更安全的解决方案是使用std::vector
和push_back
方法。
如果您有大量数据,则可能需要声明大小std::vector
以减少重新分配的数量。
答案 1 :(得分:0)
我会直接写入一个避免分配的容器:
#include <deque>
#include <iostream>
#include <sstream>
template <typename Sequence>
inline int xvalue(const Sequence& data, std::size_t index) {
return data[2*index];
}
template <typename Sequence>
inline int yvalue(const Sequence& data, std::size_t index) {
return data[2*index + 1];
}
int main() {
std::istringstream stream(""
"600000\n"
"523887 283708\n"
"231749 419866\n"
"293707 273512\n"
"296065 215334\n"
"233447 207124\n"
"264381 460210\n"
"374915 262848\n"
"449017 329022\n"
"374111 151212\n"
"2933 496970\n");
// Get rid of the suspicious first value:
int suspicious;
stream >> suspicious;
// Use a sequence, which avoids allocations
std::deque<int> data
// Read x,y:
int x;
int y;
while(stream >> x >> y) {
data.push_back(x);
data.push_back(y);
}
// Display:
for(std::size_t i = 0; i < data.size() / 2; ++i)
std::cout << "x = " << xvalue(data, i) << ", y = " << yvalue(data, i) << '\n';
// If you need contiguous memory
std::vector<int> contiguous(data.begin(), data.end());
}