您的位置:

深入剖析vector的长度

一、长度的定义

Vector是C++标准库中一个非常重要的容器,它可以动态地增加或减少存储在其中的元素,而且还能够在O(1)的时间复杂度下实现常数时间的随机访问。Vector中有一个非常重要的属性——长度,长度可以用size()函数获取。长度是指在vector中存储元素的个数,也是vector中尾元素的下标值加1。

std::vector
    vec {1, 2, 3, 4, 5}; // 定义一个长度为5的int型vector
std::cout << vec.size(); // 输出5
   

二、长度的改变

Vector的长度可以通过多种方式来改变,从而达到向vector中添加或删除元素的目的。

方法1. push_back

向vector中添加一个元素

std::vector
    vec {1, 2, 3};
vec.push_back(4);
// vec变成{1, 2, 3, 4}
   

方法2. emplace_back

向vector中添加多个元素

std::vector<std::string> vec;
vec.emplace_back("hello");
vec.emplace_back("world");
// vec变成{"hello", "world"}

方法3. pop_back

从vector中删除最后一个元素

std::vector<int> vec {1, 2, 3, 4, 5};
vec.pop_back();
// vec变成{1, 2, 3, 4}

方法4. resize

改变vector的长度,如果新的长度小于原来的长度,就会删除多余的元素,否则在vector的末尾添加默认构造函数的元素

std::vector<int> vec {1, 2, 3};
vec.resize(5);
// vec变成{1, 2, 3, 0, 0}

三、长度的优化

在使用vector时,我们应该尽可能地提高它的效率。以下是一些可以优化vector长度的方法:

方法1. 预留一定空间

在向vector中添加元素时,如果已经预留了一定数量的空间,那么就可以避免不必要的重新分配内存和拷贝操作,从而提高效率。

std::vector<int> vec;
vec.reserve(1000);
// 这里的1000是一个合适的数值

方法2. 使用移动语义

在向vector中添加元素时,如果已经预留了一定数量的空间,那么就可以避免不必要的重新分配内存和拷贝操作,从而提高效率。

std::vector<std::string> vec;
vec.emplace_back("hello");
std::string s = "world";
vec.push_back(std::move(s)); // 使用移动语义添加元素

方法3. 使用shrink_to_fit

当我们想要删除vector中的一部分元素时,可以使用shrink_to_fit函数来释放内存。shrink_to_fit会将vector的容量缩小到与当前的size相同。

std::vector<int> vec {1, 2, 3, 4, 5};
vec.pop_back();
vec.shrink_to_fit();

四、长度的应用

Vector的长度在很多应用中都非常重要,下面是一些常见的应用场景:

方法1. 遍历vector

在遍历vector时,我们通常会使用vector的长度作为循环的上界。

std::vector<int> vec {1, 2, 3, 4, 5};
for (int i = 0; i < vec.size(); ++i) {
    std::cout << vec[i] << " ";
}
// 输出1 2 3 4 5

方法2. 处理异常情况

在处理异常的时候,我们通常会检查vector的长度是否为0,以免访问不存在的元素。

std::vector<int> vec;
if (!vec.empty()) {
    std::cout << vec[0] << std::endl;
}

方法3. 调整vector

在某些场景下,我们需要根据vector的长度来进行一些调整。

std::vector<int> vec {1, 2, 3, 4, 5};
if (vec.size() > 10) {
    vec.resize(10);
}

五、总结

Vector的长度是非常重要的,它可以帮助我们实现向vector中添加或删除元素的目的,同时也会影响到vector的效率。在使用vector时,我们需要根据实际情况选择合适的长度,并且采取一些优化措施,以提高vector的效率。