矢量初始化

时间:2015-12-17 22:24:53

标签: c++ vector

我正在处理我面对以下代码片段的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;
}

为什么在使用关键字定义的代码向量对象中?我无法理解为什么在这段代码中使用这种方法的矢量。

4 个答案:

答案 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-directives for namespaces和using-declarations for namespace members
  • 类成员的使用声明
  • 类型别名和别名模板声明(自C ++ 11起)

在您的样本中

using MyVector = vector<int>;

与:

相同
typedef  vector<int> MyVector;