zoukankan      html  css  js  c++  java
  • uda 2.C++ 向量

    向量与矩阵代数

    学习得不错!你已经学习了大量 C++ 句法。你也许注意到了,使用 C++ 编程无疑比使用 Python 困难。C++ 专为快速执行而设计,使用这门语言,你可以采用许多不同方式达到同一结果。而使用 Python 写代码的速度更快,但执行速度也有所下降。

    最后,为了翻译你之前在本纳米课程中学到的 Python 代码,你还需要学习一小段句法:C++ 向量,它与 Python 列表相似。

     

    向量库

    你刚刚学习了库以及如何导入库!在本课的下一部分,你将学习如何使用 C++ 标准库中的向量。

    编写 Python 程序来存储和操作矩阵时,你使用过 Python 列表。C++ 向量类似于 Python 列表。所以,你需要学习向量,才能在 C++ 中编写矩阵代数程序。

    但是,在这里,状况有点混乱。C++ 还有一个称为列表的数据结构,但 C++ 列表与 Python 列表的实现方式不同。

    C++ 列表和 C++ 向量都是名为序列容器的结构族的一部分。这些容器允许你串行存储值,然后访问这些值。C++ 有一些序列容器,包括列表、向量和数组。

    但不要搞混了!C++ 向量最接近 Python 列表。你可以像在 Python 列表中一样将元素添加到 C++ 向量中。你还可以删除元素,或者轻松访问向量中的任何元素。

     

    声明 C++ 向量

    声明 C++ 向量变量与声明其他类型的变量相似:

    typedefinition variablename;
    

    但向量类型定义的句法看上去十分有趣,因为你还需要声明进入向量的值的类型,比如 integer, char, float 或是 string 等等。下面是一些使用向量声明变量的例子:

    std::vector<char> charactervectorvariable;
    std::vector<int> integervectorvariable;
    std::vector<float> floatvectorvariable;
    std::vector<double> doublevectorvariable:

    包含向量库

    在实际的程序中,你将需要从标准程序库中包含向量文件:

    #include <vector>
    
    int main() {
          std::vector<float> floatvectorvariable;
          return 0;
    }

    上面的代码将会声明一个 float 类型的空向量。

    声明向量更通用的方式为  :std::vector<datatype> variablename;

    #include <vector>

    int main() {

    std::vector<int> vector1;
    std::vector<int> vector2;
    std::vector<int> vector3;

    return 0;
    }

    命名空间

    在开始进一步练习 C++向量之前,你需要把 C++ 向变得更易于读写。你可能已经注意到,使用标准库的时候,你必须写大量 “std”。例如,std::cout or std::string or std::vector。

    std 被称为命名空间。简而言之,命名空间是将代码组织成逻辑组的方式。在本例中,std 是标准库的命名空间。

    实际上,你可以在 main.cpp 文件的顶部声明你的名称空间,然后就无需在代码中重复:std::

    上述代码。下面是一个例子:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
    vector<int> intvectorvariable;
    int intvariable = 5;
    cout << intvariable << endl;
    return 0;
    
    }

    请注意,向量声明、cout 和 endl 不再需要 std ::。

     

    声明命名空间的好处是,代码读写更容易。缺点是,变量和函数的命名必须更加小心。之前,你可能会这么写:

    std::cout
    

    让你的程序知道,你指的是来自标准库的 cout 函数。这样,C++ 应该就可以让你实际创建一个名为 cout 的变量或函数。这并不是一个好主意,但代码不会报错。一旦你添加了代码using namespace std;,再输入cout就会引用标准库中的函数 cout。

     使用标准库命名空间,更改代码,让代码不再使用 "std::"。

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
        
        string fruit = "apple";
        string vegetable = "broccoli";
        
        cout << "My favorite fruit is " << fruit <<
          "and my favorite vegetable is " << vegetable << "
    ";
        
        return 0;

    Python 和 C++ 对比

    我们再回到向量!你已经学习了如何声明一个空的向量。

    在下面的代码中,你可以比较 Python 列表和 C++ 向量的语法。你会看到,C++ 向量使用名为 push_back 的方法,将值附加到向量的末尾。通过代码

    vector<float> myvector (5);
    

    声明大小为 5 的向量,但没有任何赋值。为 C++ 向量赋值有点复杂;在本课中稍后部分,你会学习几种给向量变量赋值的方法。

     
     

    Python 代码,正如你之前看到的,比 C++ 代码更短。 然而,在向量中输入值也有其他方式,接下来会进一步介绍。

    初始化向量值

    在之前的课程中,你已经学习了先声明向量,再为它赋值。

    vector<float> myvector(5);
    
    myvector[0] = 5.0;
    myvector[1] = 3.0;
    myvector[2] = 2.7;
    myvector[3] = 8.2;
    myvector[4] = 7.9;
    

    我们有许多不同的方法来为向量设置初始值。下面是其中两个方法:

     

    同时声明和定义

    在声明变量时,你也可以同时设置初始值。

    std::vector<int> myvector (10, 6);
    

    这段代码将会声明一个向量包含 10 个分量,而每个分量的值为 6。

     

    使用 Bracket 来同时声明和定义变量

    如果你使用较新的 C++ 版本,比如 C++11 或者 C++17,我们还有一种方法来初始化变量。你可以使用下面的代码:

    std::vector<float> myvector = {5.0, 3.0, 2.7, 8.2, 7.9}
    

    不同版本的 C++(C++98, C++11, C++14, and C++17)

    #include <vector>
    
    using namespace std;
    
    int main() {
        
        vector<float> vector1(4);
        vector1[0] = 4.5;
        vector1[1] = 2.1;
        vector1[2] = 8.54;
        vector1[3] = 9.0;
    
        vector<float> vector(4, 3.5);
        
        return 0;
    }

    向量方法

    向量有一些有用的函数,你可以在这里看到。在本部分的课程中,你将会学习在面向对象编程课程中需要使用的函数。

    assign

    Assign 可帮助你快速填充具有固定值的向量。例如,以下代码

    vector<int> intvariable;
    intvariable.assign(10,16);
    

    可以用 10 个值为 16 的整数填充向量。

    顺便说一句,你可以在向量声明中同样操作,就像这样:

    vector<int> intvariable(10,16);
    

    assign 方法可以让你用一个新的向量覆盖你的当前向量。

    push_back

    Pushback 可以将一个元素添加到向量的末尾:

    intvariable.push_back(25);
    
    size

    Size 返回向量的大小。

    intvariable.size();

    向量和 for 循环

    很多时候,你都会使用 for 循环来操纵向量。一旦你熟悉了使用带有向量的 for 循环,你就可以实现以下功能

    • 用值填充一个向量
    • 用向量进行数学运算

    下面是一个程序,它可以初始化一个向量,然后使用 for 循环来填充向量的值。然后用另一个 for 循环读出向量值。

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main() {
    
        vector<float> example;
    
        for (int i = 0; i < 5; i++) {
            example.push_back(i*5.231);
        }
    
        for (int i = 0; i < example.size(); i++) {
            cout << example[i] << endl;
        }
    
        return 0;
    }

    把两个向量加在一起:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int main() {
    
        vector<int> exampleone (5);
        vector<int> exampletwo (5);
        vector<int> examplesum (5);
    
        exampleone[0] = 2;
        exampleone[1] = 6;
        exampleone[2] = 25;
        exampleone[3] = 1;
        exampleone[4] = 18;
    
        exampletwo[0] = 3;
        exampletwo[1] = 19;
        exampletwo[2] = 8;
        exampletwo[3] = 12;
        exampletwo[4] = 191;
    
        cout << "vector one ";
    
        // print out the first vector
        for (int i = 0; i < exampleone.size(); i++) {
            cout << exampleone[i] << " ";
        }
    
        // create a new line in the terminal
        cout << endl;
    
        cout << "vector two ";
    
        // print out the second vector
        for (int i = 0; i < exampletwo.size(); i++) {
            cout << exampletwo[i] << " ";
        }
    
        // create a new line in the terminal
        cout << endl;
    
        cout << "vector sum ";
    
        //add the vectors together
        for (int i = 0; i < exampleone.size(); i++) {
            examplesum[i] = exampleone[i] + exampletwo[i];
        }
    
        // print out the vector
        for (int i = 0; i < examplesum.size(); i++) {
            cout << examplesum[i] << " ";
        }
    
        // create a new line in the terminal
        cout << endl;
    
        return 0;
    }
  • 相关阅读:
    Dubbo使用
    JVM内存分配及GC简述
    深入理解ThreadLocal
    Java的Timer定时器
    https与http的区别
    SpringBoot微服务
    Java的BIO,NIO,AIO
    Java常量池
    Java中的值传递与引用传递
    面向对象三大特征及代码优化七大原则
  • 原文地址:https://www.cnblogs.com/fuhang/p/9077602.html
Copyright © 2011-2022 走看看