用C++初始化向量

时间:2020-02-23 14:29:59  来源:igfitidea点击:

在本文中,我们将介绍一些在C++中初始化向量的方法。
有很多方法可以做到这一点,因此我们将介绍每种方法。

方法1 :(推荐):使用初始化列表(C++ 11及更高版本)

如果您的编译器支持C++ 11以上的C++版本,则可以简单地使用{}表示法初始化向量。

由于std :: vector是一个类,因此要使用上述方式初始化该类的对象,因此它指的是C++中的初始化器列表。

这是使用初始化列表声明的示例:

std::vector<int> vec = { 1, 2, 3, 4, 5 };

由于初始化程序列表仅在C++ 11中引入,因此您需要至少支持C++ 11的最低编译器版本才能使用此方法。

这是一个示例程序来演示这种类型的初始化:

#include <iostream>
#include <vector>

int main() {
  //Initialize a vector<int> using Initializer Lists
  std::vector<int> vec = { 1, 2, 3, 4, 5 };
  
  //Use a range based for loop to print elements of the vector
  for (const auto &i: vec) {
      //Using access by reference to avoid copying
      //Using const since we're not modifying elements of the vector
      std::cout << i << std::endl;
  }

  return 0;
}

其中我们使用基于范围的for循环来打印矢量元素。

输出

1
2
3
4
5

方法2:借助数组(C++ 0x)在C++中初始化Vector

如果您使用的是基于C++ 0x(C++ 03,C++ 07等)的编译器,则仍然可以使用数组进行初始化。

int tmp[] = { 1, 2, 3, 4, 5 };
std::vector<int> vec( tmp, tmp + sizeof(tmp)/sizeof(tmp[0]) );

在基于C++ 0x的编译器上进行测试,以验证其是否有效。

#include <iostream>
#include <vector>

using namespace std;

int main() {
  //Initialize a vector<int> using Arrays
  int tmp[] = { 1, 2, 3, 4, 5 };
  std::vector<int> vec(tmp, tmp + sizeof(tmp)/sizeof(tmp[0]));
  
  //Range based for loops 不支持 in older compilers!
  //Nor is auto!
  for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
      std::cout << *it << std::endl;
  }

  return 0;
}

如果您使用的是Linux(基于g ++的编译器),请使用以下命令进行编译和运行:

gcc -o test.out test.cpp -std=c++0x
./test.out

输出

1
2
3
4
5

方法3:使用<boost>库(C++ 11和更高版本)

我们还可以使用<boost>库来实现此目的。

<boost/assign>名称空间具有list_of结构来初始化向量。

#include <boost/assign/list_of.hpp>

//Initialize a vector of {1, 2, 3, 4, 5}
std::vector<int> vec = boost::assign::list_of(1)(2)(3)(4)(5);

我们还可以使用重载的+操作符来声明向量并添加元素。

//Courtesy: https://stackoverflow.com/a/2236233

#include <boost/assign/list_of.hpp>

//Declare a vector
std::vector<int> vec;

//Add elements to it
vec += 1, 2, 3, 4, 5;

但是,这种类型的运算符重载是不可取的,因为它可能会使许多读者感到困惑,因为阅读此代码的人可能还会认为第一个元素将加1,第二个元素加2,依此类推。