क्या कोई तरीका है std::setw
मैनिपुलेटर (या उसके फ़ंक्शन width
) को स्थायी रूप से सेट करने का कोई तरीका है? यह देखो:"स्थायी" std :: setw
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <iterator>
int main(void)
{
int array[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256 };
std::cout.fill('0');
std::cout.flags(std::ios::hex);
std::cout.width(3);
std::copy(&array[0], &array[9], std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
for(int i = 0; i < 9; i++)
{
std::cout.width(3);
std::cout << array[i] << " ";
}
std::cout << std::endl;
}
चलाने के बाद, मैं देख रहा हूँ:
001 2 4 8 10 20 40 80 100
001 002 004 008 010 020 040 080 100
अर्थात प्रत्येक मैनिपुलेटर setw
/width
को छोड़कर अपनी जगह रखता है जिसे प्रत्येक प्रविष्टि के लिए सेट किया जाना चाहिए। क्या std::copy
(या कुछ और) setw
के साथ उपयोग करने का कोई शानदार तरीका है? और सुरुचिपूर्ण द्वारा मैं निश्चित रूप से std::cout
में सामान लिखने के लिए अपने स्वयं के मज़ेदार या कार्य का निर्माण नहीं कर रहा हूं।
सच अच्छा डिजाइन है, जो मुझे लगता है कि लागू किया जाएगा कई परिस्थितियों में। यह आदर्श होगा यदि चौड़ाई रनटाइम (संकलन-समय के बजाय) पैरामीटर हो सकती है, हालांकि मैं इस जानकारी को "ostream_iterator" में प्राप्त करने का एक अच्छा तरीका नहीं सोच सकता। आप सुविधा सुविधा 'टेम्पलेट <टाइपनाम टी, इंट डब्ल्यू> with_width (टी वी) {रिटर्न फिक्स्डविड्थवेल (वी, चौड़ाई) भी प्रदान कर सकते हैं; } 'प्रकार निर्दिष्ट करने के लिए सहेजने के लिए। –
@j_random_hacker ठीक है, मुझे श्रेय देना चाहिए जहां क्रेडिट की देय है। मैंने इस दृष्टिकोण को [एक कोडरेव प्रश्न] (http://codereview.stackexchange.com/q/18291/35254) से अपनाया है, केवल डेटा प्रकार टेम्पलेट पैरामीटर जोड़ रहा है। सुविधा समारोह के लिए अच्छा सुझाव। – chappjc