c++中vector的作用是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中vector的作用是啥?相关的知识,希望对你有一定的参考价值。
c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:
工具/材料:电脑、c++编译器
1、首先,打开c++编译器,构造一个int类型的空vector向量。
2、程序运行结果如图,可以看到vector的size为0。
3、如红框勾选所示,构造了6个元素值为20的vector向量。
4、运行结果显示,成功的构造了6个元素为20的向量。
5、以现有vector对象的范围作为构造函数的参数,同样也将对象复制给另一个vector对象。
6、以下,就是程序运行结果了。
参考技术A 一个动态数组模板类,你可以把它当做一个普通数组用,但是他的功能远比一般数组强大,数组最大的不好就是数组长度的限制和删除其中一个时候的后续移位问题,这些在vector中都得到了完美的解决,而且可以存储结构体什么的,用起来也像普通数组那样简单,直接加【】就可以取值。本回答被提问者采纳 参考技术B 相当于动态数组。比如 char str[100];
只能存储100个字符。
vector可以动态增长。
vector<char> str(10,'A'); //初始化为包含10个'A'字符的数组
str.push_back('B'); // 现在str有11个字符
str.push_back('C'); // 现在str有12个字符
printf("%c",str[0]); //输出A
printf("%c",str[9]); //输出A
printf("%c",str[10]); //输出B
printf("%c",str[11]); //输出C 参考技术C 形象点说就是封装成类一个顺序表
在 OpenCV 中 std::vector 而不是 cv::Mat 的 `type` 的解释是啥,我该如何更改它? (C++)
【中文标题】在 OpenCV 中 std::vector 而不是 cv::Mat 的 `type` 的解释是啥,我该如何更改它? (C++)【英文标题】:What's the interpretation of `type` for a std::vector instead of a cv::Mat in OpenCV and how can I change it? (C++)在 OpenCV 中 std::vector 而不是 cv::Mat 的 `type` 的解释是什么,我该如何更改它? (C++) 【发布时间】:2015-04-17 07:45:31 【问题描述】:我想使用 OpenCV 中的 adaptiveThreshold
函数,该函数在 documentation 中定义如下:
void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)
我不想使用Mat
作为输入,而是使用vector<double>
。这应该是可能的,因为我在documentation 中阅读了以下内容:
当您在参考手册或 OpenCV 源代码中看到 接受
InputArray
的函数,表示你实际上可以通过Mat
、Matx
、vector<T>
等(参见上面的完整列表)。
我正在使用以下代码:
vector<double> diffs; // <initialized with a number of double values>
double maxValue = 255.0; // values in diffs above the threshold will be set to 255.0
vector<double> out; // stores the output values (either 0 or 255.0)
adaptiveThreshold(diffs, out, maxValue, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 3, 0);
但是,在运行代码时出现以下错误:
OpenCV 错误:断言失败 (
src.type() == CV_8UC1
) 在adaptiveThreshold
,文件 /Users/nburk/Developer/SDKs/opencv-2.4.10/modules/imgproc/src/thresh.cpp, 第 796 行
libc++abi.dylib
: 以未捕获的类型异常终止cv::Exception
: /Users/nburk/Developer/SDKs/opencv-2.4.10/modules/imgproc/src/thresh.cpp:796: 错误:(-215)src.type() == CV_8UC1
在函数adaptiveThreshold
现在,我知道调用失败是因为输入的 type
实际上不是 CV_8UC1
。但我不知道如何解决这个问题。我认为type
属性只与Mat
对象相关,我不知道如何为vector
解释它。
我也不确定在文档中的何处阅读有关此问题的信息。我在Mat
的docs 中找到了以下语句,但这对解决我的问题没有多大帮助:
type – 数组类型。使用
CV_8UC1
, ...,CV_64FC4
创建 1-4 通道 矩阵,或CV_8UC(n)
,...,CV_64FC(n)
创建多通道(最多CV_CN_MAX
频道)矩阵。
更新:上面说type
其实是一个数组类型,但这是什么意思呢?如何使我的vector<double>
获得使用adaptiveThreshold
所需的类型CV_8UC1
?
另一个更新: 在阅读了 O'Reilly 的Learning OpenCV 一书后,我学到了以下内容:
type
可以是一长串预定义的表单类型中的任何一个:CV_<bit_depth>(S|U|F) C<number_of_channels>
。因此,矩阵可以 由 32 位浮点数 (CV_32FC1
) 组成,无符号整数 8 位 三胞胎 (CV_8UC3
),或无数其他元素。
所以,很明显,在我的例子中,vector<double>
不是CV_8UC1
类型,因为double
显然不是_unsigned 8-bit integer
。但是,我可以将我刚刚所做的这些值标准化。结果是一个vector<int>
,其值仅介于0
和255
之间。因此,它应该是CV_8UC1
类型,对吧?但是,我仍然遇到同样的错误......
【问题讨论】:
类型不匹配。 INT 和 UNSIGNED CHAR 是不同的。尝试将 vectormtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && ((1 << type0) & fixedDepthMask) != 0)
)......无论如何,由于您的提示,这个问题得到了解决。如果您发表评论作为答案,我将接受它。 :)
您是否在同一个函数中遇到此错误?
不,它说它发生在 创建中,文件 /Users/nburk/Developer/SDKs/opencv-2.4.10/modules/core/src/matrix.cpp,第 1486 行
您是否尝试将输出向量作为双精度类型?
【参考方案1】:
类型不匹配。 int
和 unsigned char
是不同的。尝试将vector<int>
转换为vector<unsigned char>
,然后它应该可以工作。
【讨论】:
以上是关于c++中vector的作用是啥?的主要内容,如果未能解决你的问题,请参考以下文章
C++中怎么拷贝构造函数(格式及相关符号的意识分别是啥)并且拷贝函数的作用是啥