用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,依此类推。