首页 > 解决方案 > 向量vs string[] 传递给函数时

问题描述

我是 C++ 的新手,我正在尝试以一种易于阅读的方式将一组非可变数量的字符串传递给一个存在于单独类文件中的函数:

//main in Caller.cpp
int main()
{
   string details[] = {"Name","Height","Weight"};

    /* vector<string> detailsV = {"Name","Height","Weight"}; 
     * Would like to use a vector but can't do this because vector cannot be 
     * initialized to = {...} in C++
     */

   Person p = Person();
   p.inspectDetails(details);
}

//Person class in Person.cpp
void inspectDetails(string details [])
{
   int sz = sizeof(details); // this will result in details = "Name" only
}

我试过了:

//Person class in Person.cpp
<template size_t N>
void inspectDetails(string (&details)[N])
{
   int sz = sizeof(details); 
}

但是,我现在不知道如何让 Caller 类中的 main 知道<template size_t N>这可能允许我使用非显式数量的数组。inpectDetails尝试以这种方式调用时,我似乎收到“没有合适的 std:string[3] 到 std:string 的转换”的错误。

将非显式数量的字符串集合传递给 Caller 类之外的函数的最佳方法是什么,同时保持像Collection c = {"...", "...", "..."}C++ 中那样对集合内容进行硬编码的能力?有没有一种更简单的方法可以将完整的字符串集合传递给一个带有指向向量的指针或类似东西的函数?

标签: c++arraysvector

解决方案


如果您需要更改其内容,请使用 astd::vector< std::string >并通过引用传递它,如果您不需要更改它们,请使用 const 引用。这是最简单、最灵活、最清晰的方式。

因此:

void inspectDetails( std::vector< std::string > & details );

std::vector< std::string > details = { "Name","Height","Weight" };
inspectDetails( details );

参看。http://en.cppreference.com/w/cpp/container/vector


推荐阅读