我不确定如何投射从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()
函数的值?
答案 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);
}