স্টেট :: সেট পুনরাবৃত্তি কিভাবে?


92

আমার এই কোডটি রয়েছে:

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
    u_long f = it; // error here
}

কোন ->firstমূল্য নেই। আমি কীভাবে মূল্য পেতে পারি?

উত্তর:


145

আপনার সেটের সদস্যটি পুনরুদ্ধার করতে আপনাকে অবশ্যই পুনরাবৃত্তিকে ডিটারফেন্স করতে হবে।

std::set<unsigned long>::iterator it;
for (it = SERVER_IPS.begin(); it != SERVER_IPS.end(); ++it) {
    u_long f = *it; // Note the "*" here
}

আপনার যদি সি ++ 11 বৈশিষ্ট্য থাকে তবে লুপের জন্য আপনি একটি পরিসীমা-ভিত্তিক ব্যবহার করতে পারেন :

for(auto f : SERVER_IPS) {
  // use f here
}    

@ মিঃসি 64৪ যে এই ক্ষেত্রে যেমন অবিচ্ছেদ্য ধরণের সাথে এটি অনেক বেশি গুরুত্বপূর্ণ তা নয়।
কিছু প্রোগ্রামার ড্যুড

4
এটি লক্ষ্য করার মতো হতে পারে যে আপনি যদি ধারকটি সংশোধন করতে চান তবে আপনাকে প্রথমটি ব্যবহার করা উচিত। গুগলারের জন্য এটি।
সৈনিক দাথ

4
আমার জিনিস সি ++ 11 সমাধানটি রেফারেন্সের সাথে হওয়া উচিত (অটো এবং এফ)। এটি বেশিরভাগ ক্ষেত্রেই ভাল। এই নির্দিষ্ট ক্ষেত্রে জন্য।
jaskmar

হাই রব, আমি যদি নতুন ইউ_লং ভেরিয়েবল ঘোষণা করা ছাড়া অন্য SERVER_IP- এ উপাদানগুলি উল্লেখ করতে চাই তবে কী হবে? আমি কি u_long & f = * এটি ব্যবহার করতে পারি? ? এবং যদি না হয়, আমি কি করব?
বায়ো কোডার

4
@BioCoder - আপনি একটি রেফারেন্স পরিবর্তনশীল ব্যবহার করতে পারেন, কিন্তু এটি একটি হওয়া আবশ্যক const , রেফারেন্স পরিবর্তনশীল যেমন: const u_long& f = *it;
রোব

15

শুধু *আগে ব্যবহার করুন it:

set<unsigned long>::iterator it;
for (it = myset.begin(); it != myset.end(); ++it) {
    cout << *it;
}

এটি এটিকে অবলম্বন করে এবং আপনাকে পুনরুক্তি করা উপাদানটি অ্যাক্সেস করার অনুমতি দেয়।


7
কেবল একটি ছোট্ট নোট: পুনরাবৃত্তির একটি অতিরিক্ত অনুলিপি এড়ানোর জন্য লুপের জন্য এটি সাধারণত ++ এর পরিবর্তে এটি ++ ব্যবহার করা পছন্দীয়।
ব্যবহারকারী 2891462

14

সি ++ 11 স্ট্যান্ডার্ডের জন্য আর একটি উদাহরণ:

set<int> data;
data.insert(4);
data.insert(5);

for (const int &number : data)
  cout << number;

5

আপনি কিভাবে স্ট্যান্ড :: সেট পুনরুক্তি করবেন?

int main(int argc,char *argv[]) 
{
    std::set<int> mset;
    mset.insert(1); 
    mset.insert(2);
    mset.insert(3);

    for ( auto it = mset.begin(); it != mset.end(); it++ )
        std::cout << *it;
}

4
বা এমনকিfor(auto i : mset) std::cout << i;
জ্যাক Deeth
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.