如何从C ++ Vector中删除尾随0

时间:2016-04-10 06:28:37

标签: c++ vector

我尝试使用带有pop_back的while循环从C ++向量中删除尾随零。如果向量的最后一个元素是0,它应该弹出最后一个元素,直到它不再为0。

很难理解错误的含义,如果有更聪明的人可以帮我解决这些错误,我将非常感激!

void Integer::unzero() {

  while ((*this).bits_vector[((*this).bits_vector.size)] == 0) {
    (*this).bits_vector.pop_back;
  }
} 

错误:

error C2679: binary '[': no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)

error C3867: 'std::vector<bool,std::allocator<_Ty>>::pop_back': non-standard syntax; use '&' to create a pointer to member

3 个答案:

答案 0 :(得分:3)

使用std::find_ifstd::vector::erase

auto rit = std::find_if(bits_vector.rbegin(), bits_vector.rend(), 
                        [](int v) { return v != 0; });
bits_vector.erase(rit.base(), end(bits_vector));

您忘了括号:bits_vector.size()bits_vector.pop_back()

答案 1 :(得分:1)

这将通过修改向量一次来删除尾随零。

int i;
for(i = v.size() - 1; i >= 0 && v[i] == 0; --i);
bits_vector.resize(i + 1);

答案 2 :(得分:0)

(*this).bits_vector.pop_back;

不会调用该函数。它只是评估成员函数。使用:

(*this).bits_vector.pop_back();

size成员函数存在同样的问题。

while ((*this).bits_vector[((*this).bits_vector.size)] == 0) {
                                            ^^^^^^

您无需使用size()[]运算符。你可以简单地使用:

while ( !(*this).bits_vector.empty() &&   // Makes sure you don't call back() on an empty vector
       (*this).bits_vector.back() == 0) {
  (*this).bits_vector.pop_back();
}