c++ vector 为啥叫向量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ vector 为啥叫向量相关的知识,希望对你有一定的参考价值。
线性代数中的一维数组不就是叫做向量(vector) 参考技术A 数学物理里的vector叫向量,c++里的vector叫模,不是向量的概念 参考技术B 其实就是数组,功能强一点,能自己管理内存,又不限长度,就叫向量啦,,但是以几何的眼光看,一个数组很难区分是向量还是点,,叫法而已。为啥我不能将整数向量推入 C++ 中的二维整数向量?
【中文标题】为啥我不能将整数向量推入 C++ 中的二维整数向量?【英文标题】:Why can't I push a vector of integers to a 2-D vector of integers in C++?为什么我不能将整数向量推入 C++ 中的二维整数向量? 【发布时间】:2016-11-09 22:07:09 【问题描述】:这是我的二维整数向量。
vector<vector<int>> nodes (r*c, vector<int> (5));
使用 for 循环我试图在这个向量中 push_back 值。 r 和 c 被传递给这个函数的整数。
for(i = 0; i < r*c; i++)
nodes[i].push_back(i/c, i%c, -1, -1, 0);
【问题讨论】:
【参考方案1】:nodes[i]
是 整数 的向量。您正在尝试将 vector 附加到整数向量。
要么做:
nodes.push_back(i/c, i%c, -1, -1, 0);
或
nodes[i] = i/c, i%c, -1, -1, 0;
第二种解决方案是最好的,因为您已经为向量提供了适当的尺寸。无需添加r*c
更多元素...
在您的代码中,要么创建空的,然后使用 push_back
填充:
std::vector<std::vector<int>> nodes;
for(i = 0; i < r*c; i++)
nodes.push_back(i/c, i%c, -1, -1, 0);
或以适当的尺寸创建并分配项目:
std::vector<std::vector<int>> nodes (r*c, std::vector<int> (5));
for(i = 0; i < r*c; i++)
nodes[i] = i/c, i%c, -1, -1, 0;
【讨论】:
【参考方案2】:使用方法insert
而不是push_back
nodes[i].insert( nodes[I].end(), i/c, i%c, -1, -1, 0);
但在此之前你应该声明向量
vector<vector<int>> nodes (r*c );
否则每个子向量的前 5 个元素将包含零。
你也可以使用方法assign
nodes[i].assign( i/c, i%c, -1, -1, 0);
【讨论】:
这不是问题。nodes[i]
是 整数 的向量。您不能在其中插入矢量。这就是为什么push_back
失败(并且insert
编译但上帝知道它做了什么。这里的Segfault)
@Jean-FrançoisFabre Нщг 你错了。它不是插入的向量。它是插入的初始值设定项列表的值。
我仍然有疑问,您显然没有对此进行测试,因为 nodes[i].insert( nodes[I].end(), i/c, i%c, -1, -1, 0);
无法编译(I
未声明)。还有nodes.insert( nodes.end(), i/c, i%c, -1, -1, 0);
编译!
@Jean-FrançoisFabre 我不知道你编译了什么。这是一个有效的代码。也许您的旧编译器不支持 C++ 11。
I
是大写的。它是非有效代码。而且我的编译器支持 C++11,并且您的代码可以编译(在修复 I
的东西之后)但不起作用。插入后尝试打印nodes[0][2]
,您将得到0
。我按预期收到了-1
。以上是关于c++ vector 为啥叫向量的主要内容,如果未能解决你的问题,请参考以下文章
为啥我无法将对象 push_back 放入 C++ 多维向量中