平台:VC++ 2005 测试通过!
.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件。
它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 twod.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
这些都是使用应用程序向导生成的 VC++ 文件故不列出
我只列出程序主要部分!
// MergeList_Vector.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
void MergeList_L( const vector<int>& La, const vector<int>& Lb, vector<int>& Lc);
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> La, Lb, Lc;
cout <<"****************MergeList*******************"<<endl;
cout <<"请输入La线性表的元素(元素间用空格隔开, -1为序列结束符): ";
int input = -1;
while ( (cin >> input) && ( input != -1 ))
La.push_back(input);
cout <<"请输入Lb线性表的元素(元素间用空格隔开, -1为序列结束符): ";
input = -1;
while ( (cin >> input) && ( input != -1 ))
Lb.push_back(input);
//对La,Lb的元素进行排序,得到两个非递减的线性表
vector<int>::iterator pos;
sort(La.begin(), La.end());
cout <<"La排序后的内容: ";
for ( int i = 0; i < La.size(); i++)
cout << La[i] <<" ";
cout << endl;
sort(Lb.begin(), Lb.end());
cout <<"Lb排序后的内容: ";
for ( int i = 0; i < Lb.size(); i++)
cout << Lb[i] <<" ";
cout << endl;
Lc.resize(Lc.size() + (La.size()+Lb.size()));
MergeList_Sq(La, Lb, Lc);
cout <<"Lc的内容: ";
for ( int i = 0; i < Lc.size(); i++)
cout << Lc[i] <<" ";
cout << endl;
return 0;
}
//接受两个非递减的线性表,并将它们合并为非递减的Lc
void MergeList_Sq( const vector<int>& La, const vector<int>& Lb, vector<int>& Lc)
{
vector<int>::const_iterator pa = La.begin();
vector<int>::const_iterator pb = Lb.begin();
vector<int>::const_iterator pa_last = La.end();
vector<int>::const_iterator pb_last = Lb.end();
vector<int>::iterator pc = Lc.begin();
//注意while循环中是pa < pa_last而不是pa <= pa_last
//这是因为pa_last是指向向量中最末一个元素的下一个位置
while ( (pa < pa_last) && (pb < pb_last) ){
if( *pa <= *pb ) *pc++ = *pa++;
else *pc++ = *pb++;
}
while ( pa < pa_last ) *pc++ = *pa++;
while ( pb < pb_last ) *pc++ = *pb++;
}