C ++ STL中的向量,是最方便的数据结构之一,可以用作动态数组。有几种方法可以在C ++中定义向量,在这里我们将详细讨论所有这些方法。
一维向量是一种线性数据结构,具有与一维数组完全相似的特征。Vector增加了动态功能的优势,这有助于它在运行时增长,这意味着可以动态扩展。现在要初始化向量,有如下几种方法,
这是初始化向量的最幼稚的方法。首先,我们只定义一个空向量。在那时,它尚不知道它将要包含多少个元素。然后,通过使用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
我们也可以使用用户定义的大小来初始化向量。就像使用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
在这里,我们不是使用默认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
我们还可以使用用户定义的元素初始化向量。
语法为:
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
我们还可以使用另一个向量的元素来初始化向量。该向量作为构造函数传递,以初始化新向量。这确实是一个深复制。
示例如下:
#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
我们还可以使用现有数组初始化向量。
示例如下:
#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