C++ Vector及其初始化方法 


Vector是一个基于模板的容器,其行为类似于动态数组它可以在运行时扩展其内存,并始终像Array一样将元素存储在连续的内存位置

通过将类型指定为模板参数,我们可以将任何类型的元素存储在vector中。

1、初始Vector

#include <iostream>
#include <vector>
int main()
{
   // This is a vector of int
    std::vector<int> vecOfInts;
    // While Adding it automatically adjusts it's size
    for(int i = 0; i < 10; i++)
        vecOfInts.push_back(i);
    std::vector<int>::iterator it = vecOfInts.begin();
    while(it != vecOfInts.end())
    {
        std::cout<<*it<<" , ";
        it++;
    }
    std::cout<<std::endl;
    for(int i = 0; i < vecOfInts.size(); i++)
        std::cout<<vecOfInts[i]<<" , ";
    std::cout<<std::endl;
    return 0;
}

2. Vector的要点

  • 有序集合:在std :: vector中,所有元素index(索引)将按照插入的先后排序。
  • 提供随机访问:与数组一样,使用opeartor []在std :: vector中访问的速度非常快。
  • 性能:如果仅在末尾插入和删除,则性能会最好好;如果在中间或开始插入/删除,则性能会较差。
  • 它总是存储对象的副本,而不是相同的引用。因此,如果要添加用户定义的类的对象,则应在类中定义复制构造函数和赋值运算符。

std :: vector在索引和迭代方面具有与数组相同的快速性能,但是它没有像数组这样的固定大小限制;您无需事先为std :: vector提供固定大小。只需开始在std :: vector中插入元素,它将自动扩展其大小。

3. Vector几种初始化方法

创建没有任何初始化的矢量对象将创建一个没有元素的空矢量,即std :: vector < int > vecOfInts;

但是,上述方法,如果频繁调用push_back()向vector添加大量元素,并不是一种有效且智能的解决方案。因此,让我们讨论如何以不同的方式初始化vector。

3.1 使用默认值

Vector接受大小作为参数的构造函数,并使用默认值初始化.

// Initialize vector with 5 integers
// Default value of all 5 ints will be 0.
std::vector<int> vecOfInts(5);
for(int x : vecOfInts)
    std::cout<<x<<std::endl;

这种方式,Vector所有元素全为0;。

3.2 使用指定元素初始化

//将向量初始化为5个具有“ Hi"值的字符串对象
std :: vector < std :: string > vecOfStr (5,“ Hi" ); 
为(std :: string str:vecOfStr )
    std :: cout << str << std :: endl;

这种方式,Vector所有元素全为字符串“Hi”。

3.3 使用数组初始化

std::string arr[] = {"first", "sec", "third", "fourth"};
// Initialize vector with a string array
std::vector<std::string> vecOfStr(arr, arr + sizeof(arr)/sizeof(std::string));
for(std::string str : vecOfStr)
    std::cout<<str<<std::endl;

3.4 使用std :: list初始化

// Create an std::list of 5 string objects
std::list<std::string> listOfStr;
listOfStr.push_back("first");
listOfStr.push_back("sec");
listOfStr.push_back("third");
listOfStr.push_back("fouth");
// Initialize a vector with std::list
std::vector<std::string> vecOfStr(listOfStr.begin(), listOfStr.end());
for(std::string str : vecOfStr)
        std::cout<<str<<std::endl;

3.5 使用Vector对象初始化另一个Vector

std::vector<std::string> vecOfStr;
vecOfStr.push_back("first");
vecOfStr.push_back("sec");
vecOfStr.push_back("third");

// Initialize a vector with other string object
std::vector<std::string> vecOfStr3(vecOfStr);

 

0



error: 内容受到保护 !!