有什么理由吗?
foo =(bar-> at(x)) - > at(y);
工作,但
foo = bar [x] [y];
不起作用,其中bar是向量的向量(使用c ++ stl)
声明是:
std :: vector <std :: vector <Object*>*>
它是向量的向量还是向量的指针向量?您的代码应该像宣传的那样工作:
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] = /* ... */;
Run Code Online (Sandbox Code Playgroud)
但是你的代码似乎有:
typedef std::vector<vec_int*> multi_int; // pointer!
multi_int* m; // more pointer!
Run Code Online (Sandbox Code Playgroud)
如果你有指针,你需要首先取消引用它们operator[]:
(*(*m)[2])[2] = /* ... */;
Run Code Online (Sandbox Code Playgroud)
这可能是丑陋的.也许临时使用参考:
multi_int& mr = m;
(*mr[2])[2] = /* ... */;
Run Code Online (Sandbox Code Playgroud)
虽然那仍然有些难看.也许免费功能很有帮助:
template <typename T>
typename T::value_type& access_ptr(T* pContainer,
unsigned pInner, unsigned pOuter)
{
return (*(*pContainer)[pInner])[pOuter]);
}
access_ptr(m, 2, 2) = /* ... */
Run Code Online (Sandbox Code Playgroud)
但最可取的是摆脱指针.指针可能会泄漏并出现各种问题,例如在抛出异常时泄漏.如果必须使用指针,请使用boost中的指针容器作为内部向量,并将实际对象存储在智能指针中.
此外,你的标题有点误导.at和之间的区别operator[]是at范围检查.否则,他们是一样的.
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |