我对 std::get()
函数感到困惑。 std::get()
可用于访问 array
、pair
和 tuple
中的成员。那么,为什么标准也不允许它访问 vector
中的成员呢?
#include <iostream>
#include <array>
#include <vector>
#include <tuple>
#include <utility> // std::pair
using namespace std;
int main()
{
array<int, 4> a1{3,4,5,67};
pair<int,int> p1{5,6};
tuple<int,float,float> t1{6,5.5,4.5};
cout << std::get<1>(a1) <<endl;
cout << std::get<1>(p1) <<endl;
cout << std::get<1>(t1) <<endl;
}
以下是输出:
4
6
5.5
但是当我尝试将 std::get()
与 vector
一起使用时,我得到了这个编译错误:
#include <iostream>
#include <array>
#include <vector>
#include <tuple>
#include <utility> // std::pair
using namespace std;
int main()
{
vector<int> v1{4,5,6,7,9};
cout << std::get<1>(v1) <<endl;
}
编译错误:
main.cpp: In function 'int main()':
main.cpp:10:27: error: no matching function for call to 'get(std::vector&)'
cout << std::get<1>(v1) <<endl;
^
In file included from main.cpp:2:0:
/usr/include/c++/5/array:280:5: note: candidate: template constexpr _Tp&
std::get(std::array<_Tp, _Nm>&)
get(array<_Tp, _Nm>& __arr) noexcept
^
最佳答案
std::get
的索引作为模板参数允许它在编译时检查索引是否有效。这只有在编译时也知道容器的大小时才有可能。 std::vector
具有可变大小:您可以在运行时添加或删除元素。这意味着 vector 的 std::get
将比 operator[]
或 at
提供零优势。
https://stackoverflow.com/questions/49516330/