用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