我有一个std :: vector <int>,我想删除第n个元素.我怎么做?
std::vector<int> vec;
vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);
vec.erase(???);
Run Code Online (Sandbox Code Playgroud) C++ 11标准对标准库相关的自移动赋值有何看法?更具体的是,什么(如果有的话)保证什么selfAssign呢?
template<class T>
std::vector<T> selfAssign(std::vector<T> v) {
v = std::move(v);
return v;
}
Run Code Online (Sandbox Code Playgroud) 据我所知,如果向量的顺序并不重要,它是更快地使用了swap- pop_back成语用于除去单个项目从std::vector.例如:
auto it = std::find(my_vec.begin(),my_vec.end(),SOME_VALUE);
std::swap(*it,my_vector.back());
my_vector.pop_back();
Run Code Online (Sandbox Code Playgroud)
前面的示例避免复制许多元素.
从同样的角度来看,如果我想打电话给std::vector::erase一个范围是代表最后n的一个项目std::vector,就对它进行优化,并且表现得像多pop_back?
例:
auto it = std::find(my_vec.begin(),my_vec.end(),SOME_VALUE);
my_vec.erase(it,my_vec.end()); // Erase everything from 'it' and beyond
Run Code Online (Sandbox Code Playgroud) 我需要一个容器,允许我在循环它时快速擦除一个元素.我不需要直接访问,因为我总是在循环中访问它.
是List不是快Vector这种情况?
伪代码:
vector<Item*> myContainer;
for(..loop over it...) {
if (someCondition)
myContainer.erase(currentElement)
}
Run Code Online (Sandbox Code Playgroud)
删除一个元素后,我需要继续循环其余的元素