C++11 如何在不使用循环的情况下获取std::array中项目的索引?

C++11 如何在不使用循环的情况下获取std::array中项目的索引?,c++11,stdarray,C++11,Stdarray,如何在不运行任何循环的情况下获取std::array中某个项的索引 #include <iostream> #include <array> std::array<int, 10> some_array = { 89, 56, 78, 96, 4, 34, 77, 2, 48, 3}; unsigned int GetIndexOfValue(unsigned int some_value) { // How get the index of so

如何在不运行任何循环的情况下获取
std::array
中某个项的索引

#include <iostream>
#include <array>

std::array<int, 10> some_array = { 89, 56, 78, 96, 4, 34, 77, 2, 48, 3};

unsigned int GetIndexOfValue(unsigned int some_value) {
    // How get the index of some_value here without running a loop?
}

int main() {
    unsigned int some_value = 34;
    std::cout << "The index of value passed is " << GetIndexOfValue(some_value) << std::endl;
}
#包括
#包括
std::array some_array={89,56,78,96,4,34,77,2,48,3};
unsigned int GetIndexOfValue(unsigned int some_值){
//如何在不运行循环的情况下获取某个_值的索引?
}
int main(){
无符号整数值=34;
标准::cout
应该做到这一点(未经测试)

应该做到这一点(未经测试)

是否可以使用std::find执行此操作

是:使用
std::array
是可能的

std::array<int, 10> some_array = { 89, 56, 78, 96, 4, 34, 77, 2, 48, 3};

auto idx =   std::find(some_array.cbegin(), some_array.cend(), 34)
           - some_array.cbegin();

std::cout << "The index of value passed is " << idx << std::endl;
std::array some_array={89,56,78,96,4,34,77,2,48,3};
auto idx=std::find(some_array.cbegin(),some_array.cend(),34)
-一些_array.cbegin();
标准::cout
是否可以使用std::find执行此操作

是:使用
std::array
是可能的

std::array<int, 10> some_array = { 89, 56, 78, 96, 4, 34, 77, 2, 48, 3};

auto idx =   std::find(some_array.cbegin(), some_array.cend(), 34)
           - some_array.cbegin();

std::cout << "The index of value passed is " << idx << std::endl;
std::array some_array={89,56,78,96,4,34,77,2,48,3};
auto idx=std::find(some_array.cbegin(),some_array.cend(),34)
-一些_array.cbegin();

std::cout您可以使用
中的功能您可以使用
中的功能是,
std::find
返回一个迭代器-这就是我减去
一些数组的原因。begin()
从中获取索引。如果您愿意,可以使用
std::distance
代替。是的,
std::find
返回一个迭代器-这就是我减去
一些数组的原因。begin()
从中获取索引。如果您愿意,可以使用
std::distance
。@vsoftco-在随机访问迭代器的情况下(
std::array
std::vector
)据我所知,这是保证。@vsoftco-不是100%确定。
Distance
类型确实是
ptrdiff\u t
,但在任何地方都找不到用于随机访问迭代器的
运算符-
。@vsoftco-好吧……我看到它现在被命名为“LegacyRandomAccessIterator”。我想这是为了避免与新的(C++20)混淆<代码> STD::RealthAccess迭代程序< /C>概念> C++对每一个经过的版本变得更加复杂。@无论如何,从中可以看到,<代码> STD::数组< /Cord>迭代器必须是“LeCalyRealAccess迭代器”(C++ 20之前),从中可以看到必须支持difference@vsoftco-如果是随机访问迭代器据我所知,(
std::array
std::vector
,至少)是有保证的。不是100%确定。
Distance
类型确实是
ptrdiff\u t
,但在任何地方都找不到用于随机访问迭代器的
运算符-
。@vsoftco-嗯……我看到现在它被命名为“LegacyRandomAccessIterator”我想它是为了避免与新的(C++ 20)<代码> STD::RealthyAccess迭代器< /C>概念>…C++变得更加复杂,每过一个版本。@ VSOFTCO -无论如何,从你可以看到,<代码> STD::数组< /COD>迭代器必须是“LeCalyRealAccess迭代器”(C++ 20之前)从中可以看出,这必须支持这种差异
unsigned int GetIndexOfValue(unsigned int some_value) {
    return std::distance(std::begin(some_array),
             std::find(std::begin(some_array), std::end(some_array), some_value));
}