c++ - 在2D vector 上使用STL算法提取第一列

标签 c++ algorithm vector stl transform

我正在尝试学习使用更多的STL算法。我无法查看是否存在更标准的编写以下代码的方式。

std::vector<std::vector<std::string>> myVec;
std::vector<std::string> myInnerVec;
for(int y=0;y < myVec.size();y++){
    myInnerVec.emplace_back(myVec[y][0]);
}

在这里,我从 vector myVec中提取第一列,并将其放入myInnerVec中。可以使用任何STL魔术来改进此代码吗?

最佳答案

例如,您可以使用标准算法std::transform

这是一个演示程序。

#include <iostream>
#include <string>
#include<vector>
#include <iterator>
#include <algorithm>

int main() 
{
    std::vector<std::vector<std::string>> v =
    {
        { "A", "B", "C" },
        { "D", "E", "F" }
    };

    std::vector<std::vector<std::string>>::size_type column;

    auto l = [&column = column]( const auto &row )
    {
        return row[column];
    };

    column = 0;

    std::vector<std::string> v1;

    v1.reserve( v.size() );

    std::transform( std::begin( v ), std::end( v ), std::back_inserter( v1 ), l );

    for ( const auto &item : v1 ) std::cout << item << ' ';
    std::cout << '\n';

    column = 1;

    std::transform( std::begin( v ), std::end( v ), std::begin( v1 ), l );

    for ( const auto &item : v1 ) std::cout << item << ' ';
    std::cout << '\n';

    return 0;
}

它的输出是
A D 
B E 

关于c++ - 在2D vector 上使用STL算法提取第一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59274755/

相关文章:

c++ - 为什么 std::string::find() 可以处理 '\0' ?

c++ - 常量字符* a[4];我可以更改 a[] 值吗?

c++ - 如果类型为 noexcept,C++ 11 STL 中的哪些算法和容器可以运行得更快?

c++ - vector 迭代器(段错误)

c++ - OpenCV 创建每行包含多个图像的矩阵

python - numpy.i 是将实际指针发送到 C++,还是复制内存?

c++ - 从 C++ 中的整数数组获取输入

c++ - 按升序排列值的算法

javascript - 将路径数组转换为数据结构

C++ 获取 vector 中 const char* [ ] 的长度