向量与矩阵代数

学习得不错!你已经学习了大量 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 ;
}

上面的代码将会声明一个 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 = ;
cout << intvariable << endl;
return ; }

请注意,向量声明、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 << "\n"; return ;

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();
vector1[] = 4.5;
vector1[] = 2.1;
vector1[] = 8.54;
vector1[] = 9.0; vector<float> vector(, 3.5); return ;
}

向量方法

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

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 = ; i < ; i++) {
example.push_back(i*5.231);
} for (int i = ; i < example.size(); i++) {
cout << example[i] << endl;
} return ;
}

把两个向量加在一起:

#include <iostream>
#include <vector> using namespace std; int main() { vector<int> exampleone ();
vector<int> exampletwo ();
vector<int> examplesum (); exampleone[] = ;
exampleone[] = ;
exampleone[] = ;
exampleone[] = ;
exampleone[] = ; exampletwo[] = ;
exampletwo[] = ;
exampletwo[] = ;
exampletwo[] = ;
exampletwo[] = ; cout << "vector one "; // print out the first vector
for (int i = ; 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 = ; 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 = ; i < exampleone.size(); i++) {
examplesum[i] = exampleone[i] + exampletwo[i];
} // print out the vector
for (int i = ; i < examplesum.size(); i++) {
cout << examplesum[i] << " ";
} // create a new line in the terminal
cout << endl; return ;
}

uda 2.C++ 向量的更多相关文章

  1. uda 3.C++二维向量

    二维向量 接下来,你将使用向量来存储矩阵.就像 Python 使用列表列表来存储矩阵一样,C++ 使用的是向量的向量.用于声明二维向量的语法有点复杂. 假设你正在使用 Python,并且想存储一个 3 ...

  2. 机器学习实战笔记(Python实现)-05-支持向量机(SVM)

    --------------------------------------------------------------------------------------- 本系列文章为<机器 ...

  3. [LeetCode] Flatten 2D Vector 压平二维向量

    Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

  4. [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

    深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...

  5. [Unity游戏开发]向量在游戏开发中的应用(三)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51088236 在上一篇博客中讲了利用向量点乘在游戏开发中应用的几种情景.本 ...

  6. [Unity游戏开发]向量在游戏开发中的应用(二)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50972976 在上一篇博客中讲了利用向量方向的性质来解决问题.这篇博客将继 ...

  7. [Unity游戏开发]向量在游戏开发中的应用(一)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50810102 向量在游戏开发中是非常实用的,我们在学校学完向量的知识后,只 ...

  8. Java基础知识笔记(一:修饰词、向量、哈希表)

    一.Java语言的特点(养成经常查看Java在线帮助文档的习惯) (1)简单性:Java语言是在C和C++计算机语言的基础上进行简化和改进的一种新型计算机语言.它去掉了C和C++最难正确应用的指针和最 ...

  9. NOI2001|POJ1182食物链[种类并查集 向量]

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65430   Accepted: 19283 Description ...

随机推荐

  1. C# 基础才是重中之重~对象的生与死

    为何要写 之所以写这篇文章,完全是因为学生们在实际开发中遇到的问题,一个对象占用的内存空间总不被释放,导致系统内存不断攀升,其最主要原因是我们对“对象的生与死”不清楚,或者从来没有认真去考虑过这件事, ...

  2. c#还有一点不太明白,既然开启了线程为何还要委托呢?

    2013-07-15 09:33threadroc | 浏览 1611 次 既然开启了线程为何还要委托呢?,开启线程本身不就是委托吗?为何委托要显示声明呢?Thread thread = new Th ...

  3. svn清理以下路径失败

    网上说是svn的数据库挂了 删除里免得数据就好了 用sqllite...嗯? 那我还得下载一个?超过五秒钟的工作我是不会去做的 打开navicat 清空表 再次尝试清理

  4. springmvc报404错误No mapping found for HTTP request with URI [/mavenSpringmvc/requesttest] in DispatcherServlet with name 'spring'

    问题404错误的原因有很多种 有这种,后边不带url的 这种一般就是没有进入到controller中 可以在toncat中看到信息 十一月 12, 2018 12:21:25 下午 org.sprin ...

  5. oracle-表空间-用户-角色-权限

    概要图 概要图 一 表空间 1.1创建表空间 --问题:创建一个名为hp的表空间,指定数据文件为hp.dbf,大小为10m. create tablespace hp datafile 'C:\app ...

  6. python实例 输出你好

    #打开新窗口,输入: #! /usr/bin/python # -*- coding: utf8 -*- s1=input("Input your name:") print(&q ...

  7. 洛谷P2982 [USACO10FEB]慢下来Slowing down [2017年四月计划 树状数组01]

    P2982 [USACO10FEB]慢下来Slowing down 题目描述 Every day each of Farmer John's N (1 <= N <= 100,000) c ...

  8. jsp页面_按回车键触发事件

    一般在列表页面中,都会带有查询按钮,当输入完查询条件后,如果需要通过鼠标点击"查询"按钮才发起查询,那么就感觉不够方便,那么我们就可以修改为按下回车键的时候发起查询. <sc ...

  9. VMware workstation12安装苹果虚拟机

    一.前言--准备工作 在win10上安装Mac虚拟机,既是费劲又是费内存的活儿 1.安装Vmware 2.下载MacOS的镜像:自行百度下载 3. unlocker的下载地址:http://downl ...

  10. line-height的用法(一)

    行高”顾名思意指一行文字的高度.具体来说是指两行文字间基线之间的距离. 从上到下四条线分别是顶线.中线.基线.底线,很像才学英语字母时的四线三格,我们知道vertical-align属性中有top.m ...