2013-10-14 2 views
1

Я новичок в C++ std :: set user.Как изменить std :: set element по вызову функции (вызов по ссылке)? in C++

Заданный вопрос: Я инициализирую набор в основной функции, и хочу вставить элемент , вызвав некоторую функцию. Но, похоже, это не работает.

Это о вызове по ссылке или что-то еще? Благодаря!

#include <iostream> 
#include <set> 
using namespace std; 
void f(set<int> myset){ 
    set<int>::iterator it; 
    // insert element 
     for(int i=1;i<11;i++){ 
    myset.insert(i*10); 
    }  
} 
int main() 
{ 
    set<int> myset; 
    set<int>::iterator it; 
    f(myset); 
    //output element 
    for(it=myset.begin();it!=myset.end();it++){ 
     cout<<*it<<" ";  
    } 
    return 0; 
} 

ответ

3

Вы правы, вам необходимо пройти по ссылке, иначе вы бы модифицировать локальную копию набора:

void f(set<int>& myset) 
{ //   ^
    for(int i = 1; i < 11; i++) 
    myset.insert(i*10); 
} 
+1

Для OP: Как правило, когда вы хотите, вызываемая чтобы изменить какое-либо значение из вызывающей функции, вам нужно передать ссылку (или указатель). Передача по значению означает «копирование», –

Смежные вопросы