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

Ébe*_*aac 2 c++ variables casting vector

我不确定如何投射从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;
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误.

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

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

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

the*_*ang 10

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

你可以做:

auto val = a.back();
a.pop_back();
Run Code Online (Sandbox Code Playgroud)


Sla*_*ica 5

文档 std::vector::pop_back()中所述,不返回任何值,您只需要在此std::vector::back()之前调用:

val = a.back();
a.pop_back();
Run Code Online (Sandbox Code Playgroud)

  • @ÉbeIsaac 这样做是有原因的,例如,如果复制或移动 ctor 抛出异常该怎么办? (5认同)