我一直在尋找,但我從來沒有能夠挽救其他比一個座標中的任何一個2維數組你怎麼一整個陣列保存到磁盤C++
-1
A
回答
1
你可以使用一個標準: :fstream或boost :: serialization。你的問題有點含糊,所以我不完全確定你想要什麼,需要什麼?
2
這叫做serialization。看看this question瞭解更多有關使用Boost做到這一點的信息。
0
如果數組包含平坦數據(即,不包括指向其它數據數據)時,可以寫在單個寫入到一個文件中的整個陣列。
不知道你的數據是什麼樣的,不可能多說這些。
0
一些修修補補後,我想出了這個:
#include <cstddef>
#include <fstream>
#include <iostream>
template<class T>
void SaveArray(const std::string & file, T * data, std::size_t length)
{
std::ofstream out(file.c_str());
for (std::size_t idx = 0; idx < length; ++idx)
{
if (idx != 0)
{
out << " ";
}
out << *data++;
}
}
template<class T>
std::size_t LoadArray(const std::string & file, T * data, std::size_t length)
{
std::ifstream in(file.c_str());
std::size_t count = 0;
while (count++ < length && in >> *data++);
return count - 1; // return number of items
}
int main()
{
int numbers[5];
numbers[0] = 10;
numbers[1] = 11;
numbers[2] = 12;
numbers[3] = 13;
numbers[4] = 14;
SaveArray("array.txt", &numbers[0], 5);
int test[5];
LoadArray("array.txt", &test[0], 5);
for (std::size_t idx = 0; idx < 5; ++idx)
{
std::cout << "test[" << idx << "]: " << test[idx] << std::endl;
}
return 0;
}
改進建議,歡迎選購。
2
基於StackedCrooked's idea,這裏有一個解決方案,它允許您使用C風格的std::vector
數組或其他元素爲<<
定義的序列。
#include <cstddef>
#include <fstream>
#include <iostream>
// Beware, brain-compiled code ahead!
template<class InpIt>
void save_seq(const std::ostream& os, InpIt begin, InpIt end)
{
if(begin != end)
os << *begin++;
while(begin != end)
os << ' ' << *begin++;
}
template<class OutpIt>
bool load_seq(const std::istream& is, OutpIt begin, std::size_t n)
{
for(std::size_t i=0; is && i<n; ++i)
is >> *begin++
return is.good() || is.eof();
}
template<class OutpIt>
bool load_seq(const std::istream& is, OutpIt begin)
{
while(is.good())
is >> *begin++
return is.eof();
}
template<class T, std::size_t N>
void save_array(const std::ostream& os, const T (&data)[N])
{
save_seq(os, data, data+N);
}
template<class T, std::size_t N>
bool load_array(const std::istream& is, T (&data)[N])
{
return load_seq(is, data, N);
}
int main()
{
const std::size_t size = 5;
int numbers[size];
numbers[0] = 10;
numbers[1] = 11;
numbers[2] = 12;
numbers[3] = 13;
numbers[4] = 14;
{
std::oftsream ofs("array.txt");
if(!ofs.good())
return 1;
save_array(ofs, numbers);
}
{
std::iftsream ifs("array.txt");
if(!ifs.good())
return 2;
int test[size];
load_array(ifs, test);
for (std::size_t idx = 0; idx < size; ++idx)
std::cout << "test[" << idx << "]: " << test[idx] << std::endl;
}
std::vector<int> numbers2;
numbers2.push_back(20);
numbers2.push_back(21);
numbers2.push_back(22);
numbers2.push_back(23);
{
std::oftsream ofs("array.txt");
if(!ofs.good())
return 1;
save_Seq(ofs, numbers2.begin(), numbers2.end());
}
{
std::iftsream ifs("array.txt");
if(!ifs.good())
return 2;
std::vector<int> test;
load_seq(ifs, std::back_inserter(test));
for (std::size_t idx = 0; idx < numbers2.size(); ++idx)
std::cout << "test[" << idx << "]: " << test[idx] << std::endl;
}
return 0;
}
相關問題
- 1. 保存UIImage陣列到磁盤
- 2. 將陣列保存到磁盤
- 3. 保存與列表列的磁盤到磁盤
- 4. BLOB保存到磁盤圖像C#
- 5. 保存c#對象到磁盤
- 6. 將PDF保存到本地磁盤C#
- 7. 列表保存到磁盤上
- 8. 將trie保存到磁盤
- 9. MySql不保存到磁盤
- 10. 將nsdate保存到磁盤
- 11. 將DynamicMethod保存到磁盤
- 12. Mongoengine FileField保存到磁盤?
- 13. UIManagedDocument不保存到磁盤
- 14. PHP命名一個磁盤陣列
- 15. 磁盤陣列和字符串整數
- 16. 磁盤存儲的陣列等
- 17. c#Interop.Word加入兩個WordDocument而不保存到磁盤
- 18. 寫c型矩陣到磁盤
- 19. 轉換磁盤陣列陣列
- 20. 爲什麼Redis Hash Bucket保存磁盤?
- 21. 保存/讀取磁盤對象列表
- 22. SK-學會保存模型到磁盤上,但只得到陣列
- 23. 磁盤陣列和陣列,內存問題
- 24. print.xtable只顯示,不保存到磁盤
- 25. 如何將IFormFile保存到磁盤?
- 26. 腳本varbinary數據保存到磁盤
- 27. RenderTargetBitmap保存原始數據到磁盤
- 28. 將值保存到磁盤XCode
- 29. RavenDB保存到磁盤查詢
- 30. 將TransformedBitmap對象保存到磁盤。
要說這是一個模糊的問題,會把它放得很溫和。你使用的是什麼類型的數組,C數組,像'std :: vector'這樣的動態數組,還是別的?如果它是動態數組,你需要從保存的數據中找到大小,還是你知道它的前期?這些數組中存儲了什麼,您是否可以將這些類型的對象保存到磁盤? – sbi 2011-04-28 14:45:13