, , push_back
insert
emplace_back
emplace
C++ containers
. , , : -
vector<unique_ptr<item>> v;
v.push_back(unique_ptr<item>(new item(5));
: -
vector<unique_ptr<item>> v;
v.emplace_back(new item(5));
-, , " " " " 15. , find_if
, remove_if
. remove_if
( find_if
), , remove_if
, . find_if
, . , .
Codes are as follows: -
#include <iostream>
#include <memory>
#include <vector>
#include <algorithm>
using namespace std;
struct item
{
int x;
item(){}
item(int x)
{
this->x=x;
}
};
int main()
{
vector<unique_ptr<item>> v;
v.emplace_back(new item(15));
v.emplace_back(new item(5));
v.emplace_back(new item(7));
v.emplace_back(new item(15));
v.emplace_back(new item(27));
v.emplace_back(new item(15));
v.emplace_back(new item(80));
cout<<"deleting the item storing value 15...\n";
auto itr = find_if(v.begin(), v.end(), [](unique_ptr<item> &u)
{
return (u->x==15);
});
v.erase(itr);
for (auto &u:v) see the use of `reference` again as without it the compiler throws error messages
{
cout<<u->x<<" ";
}
return 0;
}
The output will be: -
deleting the item storing value 15...
5 7 15 27 15 80
For remove_if
you, you just need the following changes: -
auto itr = remove_if(v.begin(), v.end(), [](unique_ptr<item> &u)
{
return (u->x==15);
});
v.erase(itr,v.end());
Here the output will be: -
deleting the items storing value 15...
5 7 27 80
Now I think your doubts would be properly cleared !!!