gpt4 book ai didi

c++ - 正确遍历std::array 的方法

转载 作者:行者123 更新时间:2023-12-02 09:53:48 46 4
gpt4 key购买 nike

考虑以下指向char的std::array数组:

std::array<char*, 10> m_arr;

我知道我可以使用以下代码遍历数组

for(size_t i {0}; i < m_arr.size(); i++) {
std::cout << m_arr.at(i) << std::endl;
}

但是,当第i个元素未正确分配时,此方法将引发“访问冲突读取位置”异常。例如,以下代码分配了前两个元素,但是第三个元素 m_arr.at(3)引发了上述错误:

    // test variables
int x {100};
double y {3.14};
int* x_ptr {&x};
double* y_ptr {&y};

// std::array of pointer to char
std::array<char*, 10> m_arr;

// set the first two elements of m_arr
char buf1[16];
sprintf_s(buf1, "%p", x_ptr);
m_arr.at(0) = buf1;
char buf2[16];
sprintf_s(buf2, "%p", y_ptr);
m_arr.at(1) = buf2;

for(size_t i {0}; i < m_arr.size(); i++) {
std::cout << m_arr.at(i) << std::endl;
}


我通过检查第i个元素与数组的最后一个元素来跳过未分配的元素,从而找到了解决此问题的快速方法,但显然这不是一个干净的答案

for(size_t i {0}; i < m_arr.size(); i++) {
if(m_arr.at(i) != m_arr.back()) {
std::cout << m_arr.at(i) << std::endl;
}
}

我相信有更好的方法遍历此数组并避免错误。预先感谢您的帮助。

最佳答案

初始化数组:

std::array<char*, 10> m_arr{}; // nullptr initialized

那么您可以检查非nullptr值的安全性:
for (auto ptr : m_arr) {
if (ptr) std::cout << ptr << std::endl;
}

关于c++ - 正确遍历std::array <char *,N>的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62065796/

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