gpt4 book ai didi

c++ - foo[i] 和 foo->at(i) 与 STL vector 的区别

转载 作者:太空狗 更新时间:2023-10-29 19:40:02 24 4
gpt4 key购买 nike

有什么原因吗

foo = (bar->at(x))->at(y);

有效但是

foo = bar[x][y];

不起作用,其中 bar 是 vector 的 vector (使用 c++ STL)

声明是:

std::vector< std::vector < Object * > * >

最佳答案

它是 vector 的 vector 还是指向 vector 的指针的 vector ?您的代码应该像宣传的那样:

typedef std::vector<int> vec_int;
typedef std::vector<vec_int> multi_int;

multi_int m(10, vec_int(10));

m.at(2).at(2) = /* ... */;
m[2][1] = /* ... */;

但是您的代码似乎有:

typedef std::vector<vec_int*> multi_int; // pointer!
multi_int* m; // more pointer!

如果您有指针,您需要先取消引用它们才能使用 operator[]:

(*(*m)[2])[2] = /* ... */;

那可能很丑。也许暂时使用引用:

multi_int& mr = m;
(*mr[2])[2] = /* ... */;

虽然那样还是有些丑陋。也许自由函数有帮助:

template <typename T>
typename T::value_type& access_ptr(T* pContainer,
unsigned pInner, unsigned pOuter)
{
return (*(*pContainer)[pInner])[pOuter]);
}

access_ptr(m, 2, 2) = /* ... */

不过,最可取的是摆脱指针。指针可能会泄漏并有各种各样的问题,比如在抛出异常时发生泄漏。如果您必须使用指针,请使用 pointer container从 boost 获取内部 vector ,并将实际对象存储在 smart pointer 中.

此外,您的标题有点误导。 atoperator[] 的区别在于 at 进行范围检查。否则,它们是相同的。

关于c++ - foo[i] 和 foo->at(i) 与 STL vector 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2060900/

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