転置行列

  1. // problem
  2. //    transposed matrix
  3. //    vector
  4. #include <iostream>
  5. #include <vector>
  6. #include <string>
  7.  
  8. int main(){
  9. std::vector< std::vector<double> > matrix;
  10. std::vector<double> row;
  11. char tmp;
  12. std::string str("");
  13. while(std::cin.get(tmp)){
  14. switch(tmp){
  15. case ' ':
  16. if(str != "")
  17. row.push_back(atof(str.c_str()));
  18. str="";
  19. break;
  20.  
  21. case '\n':
  22. if(str != "")
  23. row.push_back(atof(str.c_str()));
  24. matrix.push_back(row);
  25. row.clear();
  26. str="";
  27. break;
  28.  
  29. default:
  30. str += tmp;
  31. break;
  32. }
  33. }
  34. if(str != "")
  35. row.push_back(atof(str.c_str()));
  36. if(row.size() != 0)
  37. matrix.push_back(row);
  38.  
  39. for(unsigned int j=0; j < matrix[0].size(); j++){
  40. for(unsigned int i=0; i < matrix.size(); i++){
  41. std::cout << matrix[i][j] << ' ';
  42. }
  43. std::cout << std::endl;
  44. }
  45. return 0;
  46. }

vector (begin, end)を使って

  1. // problem
  2. //    transposed matrix
  3. //    vector_scplit
  4. #include <sstream>
  5. #include <iostream>
  6. #include <vector>
  7. #include <string>
  8. #include <iterator>
  9.  
  10. int main(){
  11. std::vector< std::vector<double> > matrix;
  12. std::string str;
  13. while(getline(std::cin, str)){
  14. std::istringstream iss(str);
  15. std::vector<double> row( (std::istream_iterator<double>(iss)),
  16. std::istream_iterator<double>() );
  17. matrix.push_back(row);
  18. }
  19.  
  20. for(unsigned int j=0; j < matrix[0].size(); j++){
  21. for(unsigned int i=0; i < matrix.size(); i++){
  22. std::cout << matrix[i][j] << ' ';
  23. }
  24. std::cout << std::endl;
  25. }
  26. return 0;
  27. }