有没有一种方法可以让一个容器调用另一个容器中的命令?这些容器位于同一个 Pod 中。
\n\n我需要许多命令行工具,它们以映像和包的形式提供。但由于一些担忧,我不想\xe2\x80\x99 将它们全部安装到一个容器中。
\n我最近查看了SGI STL的源代码.我想知道我是否可以使用" - >"运算符替换(*node).data实现operator*(),如下所示:
reference operator*() const {return (*node).data;}
Run Code Online (Sandbox Code Playgroud)
取而代之:
reference operator*() const {return node->data;}
Run Code Online (Sandbox Code Playgroud)
此外:
node是一个指向struct对象的指针,如下所示:
template<class T>
struct __list_node {
typedef void * void_pointer;
void_pointer prev;
void_pointer next;
T data;
};
Run Code Online (Sandbox Code Playgroud) 最近,我正在阅读一些关于C++的书籍,如"C++ primer"和"Effective C++".几乎每本书都说参考不能改变.我对这个说法感到困惑.因为,我可以写下这样的代码.
int a = 1, b = 2;
int& c = a;
// then I can change the reference c without compile errors.
c = b;
Run Code Online (Sandbox Code Playgroud)
所以,我无法理解它是什么意思,参考不能改变.
我编写测试代码来找出vector的itrerator是否可以超出end()迭代器,就像这样.
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> v;
v.push_back(100);
cout << v.capacity() << endl;
vector<int>::iterator itr = v.begin();
for (int i = 0; i < 10000; ++i, ++itr)
if (itr == v.end()) cout << "end at " << i << endl;
cout << *itr << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印结果:
1
end at 1
0
Run Code Online (Sandbox Code Playgroud)
向量对象v只有1个容量,但它的迭代器可以在end()迭代器之后访问内存.对这种情况有什么保护吗?