سؤال

لدي سلسلة تيار في حلقتين وهي تحرق ذاكرة الوصول العشوائي الخاصة بي.إذًا كيف يمكن مسح المخزن المؤقت للأوتار البخارية بشكل صحيح؟إنه مثل هذا للتبسيط:

stringstream ss (stringstream::in | stringstream::out);

for()
{
    for()
    {
        val = 2;
        ss << 2;
        mystring = ss.str();
        // my stuff
    }
    // Clear the buffer here
}

كتب 2 ثم 22 ثم 222...لقد حاولت .clear() أو .flush() لكن الأمر ليس كذلك.فكيف أفعل هذا؟

هل كانت مفيدة؟

المحلول

الحل الواضح هو استخدام رمز ترميز عام جديد في كل مرة ، على سبيل المثال: Genacodicetagpre

هذه هي الطريقة التي صمم بها الرمز العام لاستخدامه.(أيضا: هل أنت هل تريد حقًا رمزًا عامًا ، أو مجرد رمز ترميز عام؟)

نصائح أخرى

تعيين ss.str(""); عندما تريد مسح الأحرف الزائدة (تحرير:شكرًا لك).

يستخدم .clear() إذا قام الدفق الخاص بك بتعيين أي علامات خطأ في عملية التحويل السابقة.

إذا كنت تستخدم C++0x:

ss.swap(stringstream());

فيجوال ستوديو 2010 (SP1) يدعمه.

إذا كنت لا تستخدم C++0x:

ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();

لن يتم مسح الذاكرة، ولكن يمكنك استخدام الخاص بك stringstream كائن كما سيكون فارغا من قبل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top