gpt4 book ai didi

c++ - 给定 std::vector::data 时如何迭代值

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:24 26 4
gpt4 key购买 nike

我有一个以下列格式返回的函数:

 const value_type* data() const { return data_.data(); } 

在调用的地方。我正在尝试迭代这些值。但是当给出指向 vector 内部使用的数组中第一个元素的指针时,无法确定如何获取迭代器。

调用方:

for (auto y:X.data()) std::cout << y << " " <<std::endl;

但是得到一个

error: invalid range expression of type 'const int *'; no viable 'begin' function available

最佳答案

如果您提供 X::begin()X::end() 函数,您可以迭代元素。

这是一个例子。我已经注释掉建议的代码片段并用可行的替代方案替换它们:

#include <iostream>
#include <vector>

using value_type = int;

class X {
public:
using my_iterator = const std::vector<value_type>::iterator;

//const value_type* data() const { return data_.data(); }
my_iterator begin() { return data_.begin(); }
my_iterator end() { return data_.end(); }

private:
std::vector<value_type> data_{1,2,3,4,5,6,7};

};


int main()
{
X x{};

//for (auto y:X.data()) std::cout << y << " " <<std::endl;
for (auto y:x) std::cout << y << " " <<std::endl;

return 0;
}

关于c++ - 给定 std::vector::data 时如何迭代值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36956530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com