转置矩阵
作者:qmroom
为解决 http://zhidao.baidu.com/question/74108585.html 上的提问
使用技术:重载输出流,输出流迭代器,STL排序,文件操作
- //重写了,vc6下编译通过
- //作者:qmroom
- //2008-11-04 9:00
- //blog:http://blog.csdn.net/qmroom
- //Email:qmroom#126.com #=@
- #include "stdafx.h"
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- struct Trituple
- {
- int row;
- int col;
- double value;
- Trituple():row(-1),col(-1),value(0){}
- //friend ostream& operator<<(ostream &os, const Trituple &tpl);
- };
- ostream& operator<<(ostream &os, const Trituple &tpl)
- {
- os << tpl.row << "/t" << tpl.col << "/t" << tpl.value;
- return os;
- }
- struct ltTrituple
- {
- bool operator()(const Trituple &pos1, const Trituple &pos2) const
- {
- if (pos1.row != pos2.row)
- return pos1.row < pos2.row;
- return pos1.col < pos2.col;
- }
- };
- typedef vector<Trituple> VT;
- typedef vector<Trituple>::const_iterator Iterator;
- int main(int argc, char* argv[])
- {
- Trituple tpl;
- int nTemp;
- VT vt;
- Iterator itr;
- ifstream fin("Trituple.txt");
- while(!fin.eof())
- {
- fin>>tpl.row>>tpl.col>>tpl.value;
- if (!fin.eof())
- vt.push_back(tpl);
- }
- fin.close();
- for (itr = vt.begin(); itr != vt.end(); itr++)
- {
- nTemp = itr->row;
- (int)(itr->row) = itr->col;
- (int)(itr->col) = nTemp;
- }
- sort(vt.begin(), vt.end(), ltTrituple());
- copy(vt.begin(), vt.end(), ostream_iterator<Trituple>(cout, "/n"));
- return 0;
- }
- /*
- Output:
- 0 1 3
- 1 4 9
- 2 0 2
- 3 1 -11
- 3 2 -6
- 3 5 -8
- 4 4 19
- 5 3 -17
- 6 5 -52
- //Trituple.txt
- 0 2 2
- 1 0 3
- 1 3 -11
- 2 3 -6
- 3 5 -17
- 4 1 9
- 4 4 19
- 5 3 -8
- 5 6 -52
- */