我已经通过登录AWS站点启动EC2实例,点击"启动"按钮并遵循禁止的步骤.现在我想从Ansible脚本启动实例,为此我想(我想)需要我想要启动的图像的AMI ID.
问题是我正在从"市场"发布图像,但我找不到AMI ID.特别是我正在使用Centos 7图像.这很容易在网页界面找到,只是去市场搜索"centos",我想要的图像是第一个找到的图像,但提供的图像信息似乎不包括我的AMI ID需要从脚本启动它.解决方法是手动启动映像,然后在检查正在运行的映像时,会给出AMI ID.但有没有更容易找到它的方法?
我已经开始使用c ++几个月了,并且已经被谷歌指导到堆栈溢出大部分时间用于c ++查询.我经常注意到"你为什么不使用矢量"这一类型的劝诫,并且受到了启发,只是为了做到这一点.
因此,主要是为了获得自动内存释放的微小优势,并能够编写用于排序的类型化比较函数.我将一个指向对象的数组切换为一个向量.现在我想(似乎不正确)矢量可以或多或少地像数组一样使用,因此我初步化了:
cluster clusters[LOTS];
vector<cluster *> pclust;
pclust.reserve(numClust);
for (int i=0; i<numClust; ++i)
pclust[i] = clusters + i;
Run Code Online (Sandbox Code Playgroud)
没有来自编译器的投诉.然后一段时间后我需要在集群对象的某个属性上对向量进行排序.所以:
std::sort(pclust.begin(), pclust.end(), ClusterCompareNumSegs);
Run Code Online (Sandbox Code Playgroud)
再次编译没有问题.除了矢量没有得到排序.事实证明,vector.size()为零,当然我的初始化应该是
pclust.push_back(clusters + i);
Run Code Online (Sandbox Code Playgroud)
现在这很容易解决,但我很困惑,因为最初的错误分配工作正常.我成功迭代了向量 - 使用数组语法,如下所示:
for (clustind=0; clustind < numClust; ++clustind) {<br>
cluster *cl = pclust[clustind];
...happily access *cl...
Run Code Online (Sandbox Code Playgroud)
这一切都很好.所以我只是想知道发生了什么.据推测,在我最初的任务中,我试图访问尚未在向量中的元素(我试图将它们放入),并且向量抛出了我忽略的异常.但是,在引用位置时,指针就在那里.任何人都可以提供启发吗?
我有一个包含vector成员变量的类.我知道当它们超出范围时,存储在堆栈中的向量将被清除(即内存空闲),但我不确定类对象的破坏 - 包含向量成员变量 - 是否被认为是超出范围.
如果不是,那么破坏向量的适当方法是什么?
例如:
class fred {
char *stuff;
vector<int> v;
fred() : stuff(), v() {}
~fred() {
if (stuff) free(stuff);
// now how do I clear up the vector v? Will it be done automatically?
}
}
Run Code Online (Sandbox Code Playgroud)