如何在C ++中存储从矢量`pop_back()`获得的值?

时间:2016-11-09 05:56:01

标签: c++ variables vector casting

我不确定如何投射从pop_back() vector函数中获取的值。以下是一个简单的代码来说明问题。

#include<vector>
#include<iostream>

using namespace std;

int main()
{
  vector<int> a,b;
  int val;

  a.push_back(1);
  a.push_back(2);
  a.push_back(3);
  a.push_back(4);

  for(int i=0; i<4; i++)
  {
    val = a.pop_back();
    b.push_back(val);
  }

  vector<int>::iterator v = b.begin();
  while( v != b.end())
  {
    cout << *v << " ";
    v++;
  }
  return 0;
}

这是我得到的错误。

pushback.cpp:18:9: error: assigning to 'int' from incompatible type 'void'
    val = a.pop_back();
        ^ ~~~~~~~~~~~~
1 error generated.

我也尝试过施法; (int)a.pop_back(),但它会引发错误,说明C-style cast from 'void' to 'int' is not allowed

我是否知道是否有标准方法来存储pop_back()函数的值?

5 个答案:

答案 0 :(得分:7)

它可能听起来像返回值一样流行。但它实际上没有。标准说vector::pop_back应该删除最后一个值,没有返回值。

你可以这样做:

auto val = a.back();
a.pop_back();

答案 1 :(得分:4)

正如documentation <div class="row item-tbl-row"> <div class="col-xs-2"> <label class="checkbox-inline"> <form:checkbox value="pizza" class="checkbox chkbxPkgCat" path="categoryName" id="chkPkgPzza"/> Pizza </label> </div> <div class="col-xs-3"> <form:select type="text" class="form-control" path="itemName" id="slctItmPkgPzza"> <form:option value="-" label="---"/> </form:select> </div> <div class="col-xs-3"> <form:select type="text" class="form-control" path="" id="szpr1"> <form:option value="-" label="---"/> </form:select> </div> <div class="col-xs-2"> <input class="qty-spinner" type="number" value="0" min="0" id="qtySp1"/> </div> </div> <div class="row item-tbl-row"> <div class="col-xs-2"> <label class="checkbox-inline"> <form:checkbox value="Salad" class="checkbox chkbxPkgCat" path="content"/> Salad </label> </div> <div class="col-xs-3"> <form:select type="text" class="form-control" path="itemName" id="slctItmPkgSalad"> <form:option value="-" label="---"/> </form:select> </div> <div class="col-xs-3"> <form:select type="text" class="form-control" path="" id="szprc2"> <form:option value="-" label="---"/> </form:select> </div> <div class="col-xs-2"> <form:input class="qty-spinner" type="number" value="0" path="content" min="0"/> </div> </div> 中所述,不会返回任何值,您只需要在之前致电std::vector::pop_back()

std::vector::back()

答案 2 :(得分:3)

如果您有 vector 个对象而不仅仅是原始类型,则可以使用 std::move 从向量中移出:

auto val = std::move(a.back()); // allow call of move ctor if available
a.pop_back();

请注意,使用 back() 包装对 std::move 的调用只是因为我们知道我们将要从下一行的向量中删除该元素。

答案 3 :(得分:0)

根据http://www.cplusplus.com/reference/vector/vector/pop_back/

pop_back是void函数,它是非值返回的。

答案 4 :(得分:0)

或使用.at(i)运算符返回该值。例如

for(int i=0; i<4; i++)
{
   val = a.at(i); 
   b.push_back(val);
}