C++ 'da bir Vector
sınıfı oluşturdum ve sorunlarım için harika çalışıyor. Hala da öyle temizliyorum, ben aşağıdaki kod parçası koştu:C++ iomanip kitaplığının etkin kullanımı
std::ostream& operator<<(std::ostream &output, const Vector &v){
output<<"["
<<std::setiosflags(std::ios::right | std::ios::scientific)
<<std::setw(23)
<<std::setprecision(16)
<<v._x<<", "
<<std::setiosflags(std::ios::right | std::ios::scientific)
<<std::setw(23)
<<std::setprecision(16)
<<v._y<<", "
<<std::setiosflags(std::ios::right | std::ios::scientific)
<<std::setw(23)
<<std::setprecision(16)
<<v._z<<"]";
return output;
}
kod std::cout<<v<<std::endl;
gibi bir vektör yazdırmak için izin verir. Her sayının 16'sı ondalık olan 23 alan vardır. o yazdırmak böylece metin sağa hizalanmış:
1.123456123456e+01
-1.123456123456e+01
yerine
1.123456123456e+01
-1.123456123456e+01
kodu müthiş tekrarlayan görünüyor. Biçimi (",
setw
ve
setprecision
deyimleri)" nasıl saklayabilirsiniz "gibi bir şeyi" karakterleri standart bir şekilde yazdır, ancak bu biçimdeki sayıları "gibi bir şekilde söyleyebilirsiniz.
Teşekkür ederiz! Rob Adams'ın comment gereğince
Düzenleme
, benim çirkin kod değişti (başkaları tarafından da belirttiği gibi, hangi, pisliği 'gelecek adam' için hassas olur) (daha az ve öz ve doğru):std::ostream& operator<<(std::ostream &output, const Vector &v){
std::ios_base::fmtflags f = output.flags(std::ios::right | std::ios::scientific);
std::streamsize p = output.precision(16);
output<<"["
<<std::setw(23)<<v._x<<", "
<<std::setw(23)<<v._y<<", "
<<std::setw(23)<<v._z
<<"]";
output.flags(f);
output.precision(p);
return output;
}
http://stackoverflow.com/questions/405039/permanent-stdsetw –