vector<vector<string>> 与vector<vector<string> >区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vector<vector<string>> 与vector<vector<string> >区别相关的知识,希望对你有一定的参考价值。

CSDN的一篇文章。请问这两个哪里不一样了,我个人也是做过汇编和C的,Cpp的东西都还算熟,我就不知道加个空格就有啥不一样了,啊?!感觉作者吹牛瞎扯呢吧。
原文地址:
http://m.blog.csdn.net/vdust/article/details/2284712

C++ Primer 第五版上面说,对于C++11标准是没有区别的,但是不同的编译器可能编译的结果不同,老版本的编译器要写成vector<vector<string> > 。否则,系统会认为 >> 是单个符号,为右移操作符,并导致编译时错误。 那么如果编译时没有出错就是能直接写vector<vector<string>>了。 参考技术A 我看了他的博客,然后搜到了你的答案,我也觉得应该是没啥关系的,c++对空格还是挺不敏感的吧。 参考技术B 大哥,亲测两个区别很大,编译器会将前者>> 认为是重载>>,后者才是双重vector 参考技术C 前者100维态数组, 即100vector; 者二维态数组, 即元素vectorvector.

string a[100] 与 vector a类似, 前者100string元素维数组, 者维态数组.
Installed System Memory 系统内存:该选项显示系统中所装内存的大小及型号追问

我知道数组和vector的区别,但是和这里没有关系吧,你去读那篇博客原文,上下文也没关系吧。
我是有怀疑原文作者可能以为不加空格编译器会误以为是操作符“>>”,但是明显操作符不可能出现在那种地方啊,一般IDE和编译器都没那么傻。
如果不知道,就请不要随意复制粘贴误导网友。

将 Mat 转换为 <vector<vector>> C++

【中文标题】将 Mat 转换为 <vector<vector>> C++【英文标题】:Convert Mat to <vector<vector>> C++ 【发布时间】:2013-11-19 11:33:47 【问题描述】:

如何在 C++ 中将 Mat 转换为 2d 向量(向量的向量)? 我试过了,但 Mat.at 函数出错了。

    vector<vector<double>> dctm(300, vector<double>(300,0));
    for (int i = 0; i < 300; i++) 
        for (int j = 0; j < 300; j++) 
            dctm[i][j] = img.at<double>(i, j);
        
    

【问题讨论】:

XY.exe 中 0x7690c41f 处未处理的异常:Microsoft C++ 异常:cv::Exception at memory location 0x012aecb8.. /mat.hpp:537: error: (-215) dims ::channels) > ((DataType<_tp>::depth ) & ((1 ,std::allocator >跨度> 看看这里:***.com/questions/14303073/…(考虑使用 Vec3f 而不是 double...) 你的 Mat 的实际 type() 是什么?我敢打赌它不是双重的 它是无符号字符,但我想将其转换为双倍 【参考方案1】:

您可以通过迭代值并逐个推送它们来填充向量,但通常这不是一种好的做法。更好的解决方案是使用 stl 提供给您的范围函数。这不仅适用于矢量,也适用于任何其他 stl 结构。

更清洁(从 stl 的角度来看)和更快的解决方案应该是这样的:

for(int i=0; i<300; i++)

    Mat r = img.row(i);
    dctm.push_back(vector<double>(r.begin<unsigned char>(), r.end<unsigned char>()));

【讨论】:

【参考方案2】:

更快的方法是

vector<vector<double>> dctm(300, vector<double>(300,0));
for (int i = 0; i < 300; i++) 
    uchar *rowPtr = img.ptr<uchar>(i);
    for (int j = 0; j < 300; j++) 
        dctm[i][j] = *rowPtr[j];
    

见How to scan images, lookup tables and time measurement with OpenCV

【讨论】:

以上是关于vector<vector<string>> 与vector<vector<string> >区别的主要内容,如果未能解决你的问题,请参考以下文章

CUDA[4] sample program: matrix-vector multiplication

处理 vector<vector<float>> 的 size() 时,vector<vector<float>>::size_type 还是 vect

c++ 中的向量<vector<largeObject>> 与vector<vector<largeObject>*>

剑指offer 字符串的排列

剑指offer 字符串的排列

vector<vector<string>> 与vector<vector<string> >区别