用C ++以不同的方式初始化向量
C++STL中的向量,是最方便的数据结构之一,可以用作动态数组。有几种方法可以在C++中定义向量,在这里我们将详细讨论所有这些方法。
一维矢量简介
一维向量是一种线性数据结构,具有与一维数组完全相似的特征。Vector增加了动态功能的优势,这有助于它在运行时增长,这意味着可以动态扩展。现在要初始化向量,有如下几种方法,
1)定义空向量,然后根据需要定义push_back()
这是初始化向量的最幼稚的方法。首先,我们只定义一个空向量。在那时,它尚不知道它将要包含多少个元素。然后,通过使用push_back()函数,我们可以根据需要简单地在后面添加元素。
下面是一个根据用户需要添加元素的示例。
#include <bits/stdc++.h> using namespace std; int main(){ //空向量初始化 vector<int> arr; cout << "Enter 0 stop appending element\n"; cout << "Append any other number\n"; int a; cin >> a; while (a) { arr.push_back(a); cout << "press 0 to stop appending\n"; cout << "append any other number\n"; cin >> a; } cout << "printing the vector...\n"; //打印矢量 for (auto i : arr) cout << i << " "; cout << endl; return 0; }
输出:
Enter 0 stop appending element Append any other number 4 press 0 to stop appending append any other number 2 press 0 to stop appending append any other number -3 press 0 to stop appending append any other number 6 press 0 to stop appending append any other number 0 printing the vector... 4 2 -3 6
2)用用户定义的大小初始化向量
我们也可以使用用户定义的大小来初始化向量。就像使用malloc()或new运算符创建动态数组一样。默认情况下,这将使用元素0初始化向量。
下面是示例:
#include <bits/stdc++.h> using namespace std; int main(){ int n; cout << "Enter vector size:\n"; cin >> n; //默认情况下,它初始化为0- vector<int> arr(n); cout << "Printing the vector...\n"; for (auto i : arr) cout << i << " "; cout << endl; return 0; }
输出:
Enter vector size: 5 Printing the vector... 0 0 0 0 0
3)使用用户定义的大小和用户定义的元素进行初始化
在这里,我们不是使用默认0进行初始化,而是使用用户定义的值进行初始化
语法是
vector<int> arr(size_t, value);
创建一个大小为size_t的向量,并全部用value初始化。
#include <bits/stdc++.h> using namespace std; int main(){ int n, a; cout << "Enter vector size:\n"; cin >> n; cout << "Enter your element that you want to initialize\n"; cin >> a; //默认情况下,它初始化为0- vector<int> arr(n, a); cout << "Printing the vector...\n"; for (auto i : arr) cout << i << " "; cout << endl; return 0; }
输出:
Enter vector size: 5 Enter your element that you want to initialize 2 Printing the vector... 2 2 2 2 2
4)用用户定义的元素初始化
我们还可以使用用户定义的元素初始化向量。
语法为:
vector<int> arr{comma separated elements};
示例如下:
#include <bits/stdc++.h> using namespace std; int main(){ //用用户定义的元素初始化 vector<int> arr{ 1, 2, 3, 4, 5, -1, -2, 6 }; cout << "Printing the vector...\n"; for (auto i : arr) cout << i << " "; cout << endl; return 0; }
输出:
Printing the vector... 1 2 3 4 5 -1 -2 6
5)用其他向量的元素初始化向量
我们还可以使用另一个向量的元素来初始化向量。该向量作为构造函数传递,以初始化新向量。这确实是一个深复制。
示例如下:
#include <bits/stdc++.h> using namespace std; int main(){ //用用户定义的元素初始化 vector<int> arr1{ 1, 2, 3, 4, 5, -1, -2, 6 }; cout << "Printing the vector arr1...\n"; for (auto i : arr1) cout << i << " "; cout << endl; //使用此向量初始化另一个向量 vector<int> arr2(arr1); cout << "Printing the vector arr2...\n"; for (auto i : arr2) cout << i << " "; cout << endl; return 0; }
输出:
Printing the vector arr1... 1 2 3 4 5 -1 -2 6 Printing the vector arr2... 1 2 3 4 5 -1 -2 6
6)通过数组初始化
我们还可以使用现有数组初始化向量。
示例如下:
#include <bits/stdc++.h> using namespace std; int main(){ //静态数组 int arr[8] = { 1, 2, 3, 4, 5, -1, -2, 6 }; //用数组元素初始化 vector<int> vect(arr, arr + 8); cout << "Printing the vector...\n"; for (auto i : vect) cout << i << " "; cout << endl; return 0; }
输出:
Printing the vector... 1 2 3 4 5 -1 -2 6
这样一来,您就可以根据自己的选择初始化向量。在完成其他一些注意事项之前:
第一件事是我们可以像数组(动态分配)一样为vector分配元素,但是要做到这一点,我们不能将vector初始化为空,需要连同其大小一起初始化。对于空向量,不为向量元素分配内存。因此,我们需要首先使用用户定义的大小进行初始化。
下面的代码给出了分段错误,而第二个代码运行良好。
#include <bits/stdc++.h> using namespace std; int main(){ //定义向量 vector<int> arr; //试图分配像数组 arr[0] = 1; //细分错误,如果 //我们尝试这样分配 return 0; }
输出:
Segmentation fault (core dumped)
#include <bits/stdc++.h> using namespace std; int main(){ //定义向量 with size which allocates //初始化 vector<int> arr(2); //试图分配像数组 arr[0] = 1; //效果很好 cout << "works fine\n"; return 0; }
输出:
works fine