C++ Vectors

本文翻译自: C++ Vectors

在C++中,vector被用于存储相似数据类型的元素。然而,与数组不同,一个vector的大小是可以动态增加的。

这意味着,每当我们需要时,我们都可以在执行程序期间改变vector的大小。

vector是C++标准模板库的一部分,为了使用vector,我们需要包含以下头文件:

#include <vector>

1.C++ vector的声明
一旦我们包含了头文件,接下来就是我们在C++中声明一个vector:

std::vector<T> vector_name;

类型参数T指出了vector的类型,它可以是任何的原始数据类型,比如int、char、float。
由于vector的大小能够动态增加,因此我们在这里不指定其大小。

2.C++ vector初始化
有不同的方式去初始化C++中的vector:
(1) 方法一:

// Initializer list
vector<int> vector1 = {1, 2, 3, 4, 5};
// Uniform initialization
vector<int> vector2 {1, 2, 3, 4, 5};

(2) 方法二:

vector<int> vector3(5, 12);

在这个例子中,5是vector的大小,而12则是vector中的值。上述代码的效果等同于:

vector<int> vector3 = {12, 12, 12, 12, 12};

3.实例: C++ vector初始化
代码如下:

#include <iostream>
#include <vector>
using namespace std;

int main() {

  // initializer list
  vector<int> vector1 = {1, 2, 3, 4, 5};

  // uniform initialization
  vector<int> vector2{6, 7, 8, 9, 10};

  // method 3
  vector<int> vector3(5, 12);

  cout << "vector1 = ";

  // ranged loop
  for (const int& i : vector1) {
    cout << i << "  ";
  }

  cout << "\nvector2 = ";

  // ranged loop
  for (const int& i : vector2) {
    cout << i << "  ";
  }

  cout << "\nvector3 = ";

  // ranged loop
  for (int i : vector3) {
    cout << i << "  ";
  }

  return 0;
}

运行结果:

vector1 = 1  2  3  4  5  
vector2 = 6  7  8  9  10  
vector3 = 12  12  12  12  12

4.基本的vector操作
(1) 增加元素
(2) 访问元素
(3) 改变元素
(4) 删除元素

5.向vector添加元素
我们使用push_back( )方法,将一个元素添加到了vector的末尾。
代码案例如下:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> num {1, 2, 3, 4, 5};

  cout << "Initial Vector: ";

  for (const int& i : num) {
    cout << i << "  ";
  }
  
  // add the integers 6 and 7 to the vector
  num.push_back(6);
  num.push_back(7);

  cout << "\nUpdated Vector: ";

  for (const int& i : num) {
    cout << i << "  ";
  }

  return 0;
}

输出结果:

Initial Vector: 1  2  3  4  5  
Updated Vector: 1  2  3  4  5  6  7

我们也可以使用insert( )和emplace( )将新元素添加到vector中。

6.访问vector中的元素
我们可以使用at( )函数来访问vector中具有特定下标的元素,比如:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> num {1, 2, 3, 4, 5};

  cout << "Element at Index 0: " << num.at(0) << endl;
  cout << "Element at Index 2: " << num.at(2) << endl;
  cout << "Element at Index 4: " << num.at(4);

  return 0;
}

输出结果:

Element at Index 0: 1
Element at Index 2: 3
Element at Index 4: 5

除了上述的at( )函数,我们也可以使用[ ]去访问数组元素,比如:

vector<int> num {1, 2, 3};
cout << num[1];  // Output: 2

然而最好还是使用at( ),因为当发生越界时,at( )就会抛出异常,而使用[ ]就会得到脏数据.

7.改变vector中的元素
我们同样也能利用at( )函数改变vector中的某个元素,比如:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> num {1, 2, 3, 4, 5};

  cout << "Initial Vector: ";

  for (const int& i : num) {
    cout << i << "  ";
  }

  // change elements at indexes 1 and 4
  num.at(1) = 9;
  num.at(4) = 7;

  cout << "\nUpdated Vector: ";

  for (const int& i : num) {
    cout << i << "  ";
  }

  return 0;
}

输出结果:

Initial Vector: 1  2  3  4  5  
Updated Vector: 1  9  3  4  7

注意这两个语句:

num.at(1) = 9;
num.at(4) = 7;

这两个语句将下标为1和4的元素的值分别改成了9和7

8.删除C++ Vector中的元素
为了删除vector中的某个单独的元素,我们使用了pop_back( )函数,比如:

#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> prime_numbers{2, 3, 5, 7};
  
  // initial vector
  cout << "Initial Vector: ";
  for (int i : prime_numbers) {
    cout << i << " ";
  }

  // remove the last element
  prime_numbers.pop_back();

  // final vector
  cout << "\nUpdated Vector: ";
  for (int i : prime_numbers) {
    cout << i << " ";
  }
  
  return 0;
}

输出结果:

Initial Vector: 2 3 5 7 
Updated Vector: 2 3 5 

我们使用如下语句删掉了vector中的最后一个元素:

prime_numbers.pop_back();

9.C++ Vector的函数:
在这里插入图片描述

10.C++ Vector迭代器
vector的迭代器的作用被用于指向某一个元素的地址,类似于指针。我们可以使用如下的句法创建迭代器:

vector<T>::iterator iteratorName;

11.初始化vector迭代器
我们可以使用begin( )和end( )函数来对vector初始化:
(1) 函数begin( )
begin( )函数返回指向vector的第一个元素的迭代器,比如:

vector<int> num = {1, 2, 3};
vector<int>::iterator iter;

// iter points to num[0]
iter = num.begin();

(2) 函数end( )
该函数指向vector的最后一个元素的下一个位置:

// iter points to the last element of num
iter = num.end() - 1;

11.vector迭代器案例1
代码:

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> num {1, 2, 3, 4, 5};

  // declare iterator
  vector<int>::iterator iter;

  // initialize the iterator with the first element
  iter = num.begin();

  // print the vector element
  cout << "num[0] = " << *iter << endl;

  // iterator points to the 3rd element
  iter = num.begin() + 2;
  cout << "num[2] = " << *iter << endl ;

  // iterator points to the last element
  iter = num.end() - 1;
  cout << "num[4] = " << *iter << endl ;

  return 0;
}

输出结果:

num[0] = 1
num[2] = 3
num[4] = 5

12.vector迭代器案例2
代码:

#include <iostream>
#include <vector>
using namespace std ;

int main()
{
    vector<int> num {1, 2, 3, 4, 5} ;
    vector<int>::iterator iter ;

    for(iter = num.begin(); iter != num.end(); iter++)
        cout << *iter << " " ;
}

输出结果:

1  2  3  4  5 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值