最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++如何保存vector到文件

 更新時(shí)間:2022年11月11日 10:03:57   作者:BlackCarDriver  
這篇文章主要介紹了c++如何保存vector到文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

c++保存vector到文件

實(shí)現(xiàn)將vector中的數(shù)據(jù)保存到二進(jìn)制文件和從文件中讀取數(shù)據(jù)并還原vector并不難,關(guān)鍵是要把握好一些小細(xì)節(jié)背后的原理,以及確定好存儲(chǔ)的格式。

確定格式跟網(wǎng)絡(luò)通信中的通信協(xié)議非常相似,只用存取雙方都依照協(xié)議行事,才能完成完整步驟。

以下代碼提供例子,僅供參考

#include<iostream>
#include<stdio.h>
#include<vector>
#include<string>
#include<string.h>
#include<fstream>
using namespace std;

const int vertif = 0x1234abcd;		//vertif放在文件的開(kāi)頭和結(jié)尾用于簡(jiǎn)單判斷是否正確讀取數(shù)據(jù) 
string filePath = "D:/TEMP/DATA";		

struct Unit{
	int idx;
	char str[10];
};


//將vector保存到二進(jìn)制文件 
int saveData(){
	//創(chuàng)建測(cè)試數(shù)據(jù) 
	Unit tmp;
	vector<Unit>Data;	
	tmp.str[0] = 'a';
	for(int i=0; i<10; i++){
		tmp.idx = i;
		tmp.str[0] ++;
		Data.push_back(tmp); 	//注意若存放的是指針類型則需要?jiǎng)討B(tài)申請(qǐng)內(nèi)存再pushback() 
	}
	//將vector保存到文件,格式:4字節(jié)檢驗(yàn)碼+4字節(jié)數(shù)組長(zhǎng)度+4字節(jié)數(shù)據(jù)長(zhǎng)度+可變長(zhǎng)度的數(shù)據(jù)+4字節(jié)尾部檢驗(yàn)碼
	ofstream ofile(filePath.c_str(), ios::binary);
	if(ofile.is_open()==false){
		cout<<"Open file fail!"<<endl;
		exit(1);
	}
	ofile.write((char*)&vertif, sizeof(int));
	
	int length = Data.size();
	ofile.write((char*)&length, sizeof(int)); 
	
	int totalSize = Data.size()*sizeof(Unit);
	ofile.write((char*)&totalSize, sizeof(int));
	
	ofile.write((char*)&Data[0], totalSize);	//注意取址方式,不能用begin() 
	ofile.write((char*)&vertif, sizeof(int));
	
	ofile.close();
	return 0;
} 

//從二進(jìn)制中讀取之前保存的數(shù)據(jù)并還原vector
int restore(){
	ifstream ifile(filePath.c_str(), ios::binary);
	int tmpVertif, length, totalSize;
	ifile.read((char*)&tmpVertif, sizeof(int));
	if (tmpVertif!=vertif){
		cout<<"Unknow format at the begin of file...";
		exit(1);
	}
	ifile.read((char*)&length, sizeof(int));
	ifile.read((char*)&totalSize, sizeof(int));
	vector<Unit>Data(length);	//需要往文件里面放長(zhǎng)度的原因
	ifile.read((char*)&Data[0], totalSize);
	ifile.read((char*)&tmpVertif, sizeof(int));
	if (tmpVertif!=vertif){
		cout<<"Unknow format at the end of file..."<<endl;
		exit(1);
	}
	for(int i=0; i<Data.size(); i++){
		cout<< Data[i].idx <<"   "<<Data[i].str[0] <<endl;
	} 
	return 0;
} 

int main(){
	saveData();
	restore();
}

運(yùn)行的結(jié)果:

c++讀文件,將內(nèi)容分成兩個(gè)vector

//123.txt
 
ABS	3
Acrylic	4.8
Aluminum	70
Cortical_bone	18
Cancellous_bone	3.7
Carbon_fiber	150
Co_Cr	53.2
Concrete	17
CFRP	17.9
PEEK	3.8
Platinum	147
Silicon_carbide	450
Stainless_steel	51
Titanium	50.2
 
#include<iostream>
#include <fstream>
#include <sstream>
#include<string>
#include <vector>
using namespace std;
# define MAX 2000
        int main()
        {
            ifstream in_file("123.txt");
            string a;
            vector<string> s;
            vector<double> d;
            
            while (getline(in_file, a)) {
                istringstream record(a);
                string  word;
                vector<string> vs;
 
                while (record >> word)
                    vs.push_back(word);
 
                string aa;
                double dd;
                aa = vs[0];
                dd = stod(vs[1]);
                s.push_back(aa);
                d.push_back(dd);             
            }
 
            for (int i = 0; i < s.size(); i++)
                cout<<s[i] << "  " <<endl;
 
            for (int i = 0; i < s.size(); i++)
                cout <<  d[i] << endl;
 
            return  0;
        }
#include<iostream>
#include <fstream>
#include<string>
#include <vector>
using namespace std;
//字符串分割函數(shù)
vector<string> split(string str, string pattern)
{
    string::size_type pos;
    vector<string> result;
    str += pattern;//擴(kuò)展字符串以方便操作
    int size = str.size();
 
    for (int i = 0; i < size; i++)
    {
        pos = str.find(pattern, i);
        if (pos < size)
        {
            std::string s = str.substr(i, pos - i);
            result.push_back(s);
            i = pos + pattern.size() - 1;
        }
    }
    return result;
}
        int main()
        {
            ifstream in_file("123.txt");
            string a;
            vector<string> s;
            vector<double> d;
            
            while (getline(in_file, a)) {
 
                vector<string> vs;
                string pattern = "\t";
                string::size_type pos;
                a = a + pattern;
                for (int i = 0; i < a.size(); i++)
                {
                    pos = a.find(pattern, i);
                    if (pos < a.size())
                    {
                        std::string s = a.substr(i, pos - i);
                        vs.push_back(s);
                        i = pos + pattern.size() - 1;
                    }
                }
 
 
                string aa;
                double dd;
                aa = vs[0];
                dd = stod(vs[1]);
                s.push_back(aa);
                d.push_back(dd);             
            }
 
            for (int i = 0; i < s.size(); i++)                cout<<s[i] << "  " <<endl;
 
            for (int i = 0; i < s.size(); i++)                cout <<  d[i] << endl;
 
            return  0;
        }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • c++ 隨機(jī)數(shù)問(wèn)題的相關(guān)研究

    c++ 隨機(jī)數(shù)問(wèn)題的相關(guān)研究

    這篇文章主要介紹了c++ 隨機(jī)數(shù)問(wèn)題的相關(guān)研究,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-03-03
  • 利用C語(yǔ)言實(shí)現(xiàn)經(jīng)典游戲斗獸棋

    利用C語(yǔ)言實(shí)現(xiàn)經(jīng)典游戲斗獸棋

    《斗獸棋》是一款棋類游戲,整個(gè)游戲畫(huà)面是分為兩塊區(qū)域,中間有河流分割兩塊區(qū)域,有橋梁可以讓彼此的動(dòng)物過(guò)河,要取得勝利,必須占領(lǐng)那一邊動(dòng)物的巢穴獲勝利。本文將用C語(yǔ)言實(shí)現(xiàn)這一游戲,需要的可以參考一下
    2022-03-03
  • epoll多路復(fù)用的一個(gè)實(shí)例程序(C實(shí)現(xiàn))

    epoll多路復(fù)用的一個(gè)實(shí)例程序(C實(shí)現(xiàn))

    這篇文章主要為大家詳細(xì)介紹了epoll多路復(fù)用的一個(gè)實(shí)例程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語(yǔ)言編程C++自定義個(gè)性化類型

    C語(yǔ)言編程C++自定義個(gè)性化類型

    這篇文章主要介紹了C語(yǔ)言編程中如何來(lái)自定義C++個(gè)性化類型,文中附含詳細(xì)的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • C++如何實(shí)現(xiàn)簡(jiǎn)易掃雷游戲

    C++如何實(shí)現(xiàn)簡(jiǎn)易掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C++如何實(shí)現(xiàn)簡(jiǎn)易掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 詳解C語(yǔ)言中函數(shù)宏的三種封裝方式

    詳解C語(yǔ)言中函數(shù)宏的三種封裝方式

    函數(shù)宏,即包含多條語(yǔ)句的宏定義,其通常為某一被頻繁調(diào)用的功能的語(yǔ)句封裝,且不想通過(guò)函數(shù)方式封裝來(lái)降低額外的彈棧壓棧開(kāi)銷(xiāo)。本文就來(lái)聊聊函數(shù)宏的三種封裝方式吧
    2023-03-03
  • C++?函數(shù)重載背后的原理

    C++?函數(shù)重載背后的原理

    這篇文章主要介紹了C++?函數(shù)重載背后的原理,我們不僅僅需要學(xué)會(huì)重載的使用,更要了解C++為什么支持函數(shù)重載,下面我們一起進(jìn)入文章學(xué)習(xí)該內(nèi)容吧
    2022-05-05
  • visual studio code 編譯運(yùn)行html css js文件的教程

    visual studio code 編譯運(yùn)行html css js文件的教程

    這篇文章主要介紹了visual studio code 如何編譯運(yùn)行html css js文件,本文通過(guò)圖文實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • VS2019實(shí)現(xiàn)C++的第一個(gè)MFC程序

    VS2019實(shí)現(xiàn)C++的第一個(gè)MFC程序

    本文主要介紹了VS2019實(shí)現(xiàn)C++的第一個(gè)MFC程序,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • C++非遞歸遍歷磁盤(pán)文件和遞歸遍歷磁盤(pán)文件的程序示例

    C++非遞歸遍歷磁盤(pán)文件和遞歸遍歷磁盤(pán)文件的程序示例

    這篇文章主要介紹了C++非遞歸遍歷磁盤(pán)文件和遞歸遍歷磁盤(pán)文件的程序示例,大家可以參考使用二種方法
    2013-11-11

最新評(píng)論

阿拉善盟| 岱山县| 略阳县| 乾安县| 蒙城县| 江川县| 昌平区| 巴塘县| 巴东县| 黄山市| 湘潭市| 德昌县| 即墨市| 鄂伦春自治旗| 静乐县| 中西区| 湘阴县| 吉林市| 托里县| 乐安县| 北京市| 汝州市| 家居| 遂溪县| 临武县| 汶上县| 衡山县| 乌鲁木齐市| 雅江县| 大同县| 沂南县| 九寨沟县| 登封市| 昭觉县| 棋牌| 建宁县| 梁河县| 灵石县| 沈阳市| 铜鼓县| 浦北县|