You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++传递std::array字符串数组到函数后调用begin、end及size()报错问询

错误根源

你传递给sortArrays函数的参数是std::array首元素的地址,函数形参string arr[]在C++中会自动退化为string*类型的指针。指针属于原生类型,没有begin()、end()、size()这类成员方法,这就是编译报错的直接原因。你在main函数中可以正常调用这些方法,是因为你操作的是std::array类的实例对象,该类模板本身封装了这些成员方法。

另外你原代码中std::sort的调用写法也有错误:sort函数接收的是首尾两个迭代器参数,不需要对迭代器做解引用操作。

修复方案

方案1:直接传递std::array对象(推荐)

通过模板适配不同大小的std::array,保留对象的完整类型信息,可以直接调用自带的begin()、end()方法:

#include <iostream>
#include <array>
#include <string>
#include <algorithm>
using namespace std;

// 模板适配不同大小的std::array<string, N>
template<size_t N>
void sortArrays(array<string, N>& arr)
{
    sort(arr.begin(), arr.end());
    // 排序后输出验证
    for(const auto& str : arr) {
        cout << str << " ";
    }
    cout << endl << endl;
}

int main()
{
    array<string, 5> hello = {"Hello", "world", "How", "Are", "You"};
    sortArrays(hello);
    return 0;
}

方案2:传递指针+长度(兼容原生数组场景)

如果你一定要传原生指针作为参数,需要同时把数组长度传入函数,手动构造排序的迭代器范围:

#include <iostream>
#include <array>
#include <string>
#include <algorithm>
using namespace std;

void sortArrays(string* arrPtr, size_t len)
{
    sort(arrPtr, arrPtr + len);
    // 排序后输出验证
    for(size_t i=0; i<len; i++) {
        cout << arrPtr[i] << " ";
    }
    cout << endl << endl;
}

int main()
{
    array<string, 5> hello = {"Hello", "world", "How", "Are", "You"};
    sortArrays(hello.data(), hello.size());
    return 0;
}

内容的提问来源于stack exchange,提问作者theNewGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:00:04