573 typedef std::string::size_type size_type;
578 std::vector<std::string> values(m * n);
579 std::ostringstream oss;
580 std::ostringstream ossFixed;
581 std::ios_base::fmtflags original_flags = oss.flags();
584 ossFixed.setf(std::ios::fixed, std::ios::floatfield);
586 size_type maxBefore = 0;
587 size_type maxAfter = 0;
589 for (
unsigned int i = 0; i < m; ++i) {
590 for (
unsigned int j = 0; j < n; ++j) {
592 oss << (*this)[i][j];
593 if (oss.str().find(
"e") != std::string::npos) {
595 ossFixed << (*this)[i][j];
596 oss.str(ossFixed.str());
599 values[(i * n) + j] = oss.str();
600 size_type thislen = values[(i * n) + j].
size();
601 size_type p = values[(i * n) + j].find(
'.');
603 if (p == std::string::npos) {
614 size_type totalLength = length;
618 maxAfter = std::min<size_type>(maxAfter, totalLength - maxBefore);
629 s <<
"[" << m <<
"," << n <<
"]=\n";
631 for (
unsigned int i = 0; i < m; ++i) {
633 for (
unsigned int j = 0; j < n; ++j) {
634 size_type p = values[(i * n) + j].find(
'.');
635 s.setf(std::ios::right, std::ios::adjustfield);
636 s.width(
static_cast<std::streamsize
>(maxBefore));
637 s << values[(i * n) + j].substr(0, p).c_str();
640 s.setf(std::ios::left, std::ios::adjustfield);
641 if (p != std::string::npos) {
642 s.width(
static_cast<std::streamsize
>(maxAfter));
643 s << values[(i * n) + j].substr(p, maxAfter).c_str();
646 assert(maxAfter > 1);
647 s.width(
static_cast<std::streamsize
>(maxAfter));
657 s.flags(original_flags);
659 return static_cast<int>(maxBefore + maxAfter);