我正在处理我面对以下代码片段的C ++向量:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
using MyVector = vector<int>;
MyVector vectorA(1);
cout << vectorA.size() << " " << vectorA[0] << endl;
MyVector vectorB(1, 10);
cout << vectorB.size() << " " << vectorB[0] << endl;
MyVector vectorC{ 1, 10 , 100, 1000 };
cout << vectorC.size() << " " << vectorC[3] << endl;
return 0;
}
为什么在使用关键字定义的代码向量对象中?我无法理解为什么在这段代码中使用这种方法的矢量。
答案 0 :(得分:4)
使用using
关键字为类型MyVector
创建别名vector<int>
。您可以在此处详细了解:http://en.cppreference.com/w/cpp/language/type_alias
效果与typedef vector<int> MyVector
相同。
答案 1 :(得分:2)
连续输入模板参数可能很烦人,特别是当它们变得非常长时。 using
语法可以方便地保持简短和一致,而无需每次都输入vector<...>
。
答案 2 :(得分:1)
在这种情况下,using A = B;
,using允许您以比宏定义更受控制的方式将数据类型名称A替换为数据类型名称B,并且与typedef
类似(如果不相同) 。
目的是用一个更易于传达和使用的术语来取代一些神秘的魔法。在这里,您通常希望改善清晰度和简洁性中的一个或两个。您正在尝试使某些内容更易于阅读并更容易输入。
using MyVector = vector<int>;
的例子几乎毫无意义。 vector<int>
简短明了。您确切地知道vector<int>
一目了然,因此无法获得明确的好处。
简洁是值得怀疑的。保存了整整三个字符。随着时间的推移,这将加起来,但我不确定它是否会与其他人查找MyVector
的浪费时间相匹配。幸运的是现代IDE对你很擅长,所以你不要浪费时间和头发寻找MyVector.h
。
然而对于像using CubeDataIterator = std::list<core::utils::DataRecord<UEI::Cube>>::iterator
这样的东西,对眼睛是善良的。它是Cube数据的迭代器,无论它是什么。但是,如果你已经知道Cube是什么,那你就会摇摆不定。
答案 3 :(得分:0)
C ++关键字:使用
<强>用法强>
在您的样本中
using MyVector = vector<int>;
与:
相同typedef vector<int> MyVector;