1 #include <iostream> 2 #include <vector> 3 #include <set> 4 5 using namespace std; 6 struct PasswordFormData { 7 const char* signon_realm; 8 }; 9 10 struct PasswordForm { 11 std::string signon_realm; 12 PasswordForm(); 13 ~PasswordForm(); 14 }; 15 16 17 PasswordForm::PasswordForm(){ 18 } 19 20 PasswordForm::~PasswordForm() { 21 } 22 23 PasswordForm* CreatePasswordFormFromData( 24 const PasswordFormData& form_data) { 25 PasswordForm* form = new PasswordForm(); 26 if (form_data.signon_realm) { 27 form->signon_realm = "http://foo.example.com"; 28 } 29 return form; 30 } 31 32 typedef std::set<const PasswordForm*> SetOfForms; 33 34 int main() 35 { 36 static const PasswordFormData form_data[] = { 37 { "http://foo.example.com"}, 38 }; 39 std::vector<PasswordForm*> vector1; 40 for (int i = 0; i < sizeof(form_data)/sizeof(form_data[0]); ++i) { 41 PasswordForm* form = CreatePasswordFormFromData(form_data[i]); 42 vector1.push_back(form); 43 } 44 45 #if BUG 46 SetOfForms set1(vector1.begin(), vector1.end()); 47 #else 48 SetOfForms set1; 49 std::copy(vector1.begin(), vector1.end(), std::inserter(set1, set1.begin())); 50 #endif 51 for(std::vector<PasswordForm*>::iterator iter = vector1.begin(); iter != vector1.end(); ++iter) { 52 const PasswordForm* value = *iter; 53 cout << "************************************************ vector value " << value->signon_realm << std::endl; 54 } 55 cout<<"******************************************** set size "<< set1.size() << std::endl; 56 for(SetOfForms::iterator iter = set1.begin(); iter != set1.end(); ++iter) { 57 const PasswordForm* value = *iter; 58 cout << "************************************************ set value " << value << std::endl; 59 cout << "************************************************ set value " << value->signon_realm << std::endl; 60 } 61 return 0; 62 } 63