如果这个问题在其他地方被问了/回答了,我很抱歉,但我没有找到任何东西,因为我不完全确定该问什么/如何问这个问题……
我要做的是设置某种容器;列表,数组,向量,什么的,这将允许我从特定的索引中放置和删除对象。
就像这样:
[empty][empty][object][empty][object][object][empty]我将把对象从一个向量移动到这个容器的一个特定索引中,然后从这个容器移动到另一个向量。
什么是最好的方式来表示这个,什么样的容器最适合?我最初使用的是向量,但是内置的函数似乎没有给我足够的控制对象结束的位置。要么是前面要么是后面。
我需要找出保持这些“空”索引的最佳方法,并自由地在每个元素中来回移动对象。
发布于 2014-02-14 21:47:43
一个简单的、绝对次优的、但非常有效的解决方案可以是以以下方式使用向量:
#include <iostream>
#include <vector>
using namespace std;
struct Your_Object
{
Your_Object& operator=(const Your_Object& other)
{
// Write a proper assignment operator here if you want to assign or swap values
cout << "hello from assignment operator"<<endl;
return *this;
}
};
int main() {
Your_Object nullObj;
std::vector<Your_Object> vec;
vec.reserve(10); // Creates 10 empty objects calling default constructors. Notice that this will NOT affect the vector's size, for that use resize()
Your_Object space5, space3; // Two objects to put in space5 and space3
// Put objects in space 5 and 3
vec[5] = space5;
vec[3] = space3;
// Move object in space 5 to another place
vec[1] = vec[5];
return 0;
}http://ideone.com/YDu6LC
如果您成功地编写了一个正确的副本赋值操作符(如果您使用的是C++11,则可能带有移动语义),它可以对您的对象进行深度复制,当然,如果这对您来说并不太繁重,那么上面的操作系统可能是您需要做的事情的一个简单的工作系统。
只需记住调整大小(或预留,为了区别,请看这里:https://stackoverflow.com/a/7397862/1938163)预先需要的空间。
发布于 2014-02-14 21:39:51
如果我正确地理解了你的问题,你想要把数据放在你的向量中,按照一定的模式。
您可以使用一个简单的向量并自己实现函数来放置数据。
例如,如果您希望将数据放在第三位中:
void placeItem(std::vector<int> my_vector, int element, unsigned int index){
my_vector[((index+1)*3)-1]=element;
}
int retreiveItem(std::vector<int> my_vector, unsigned int index){
return my_vector[((index+1)*3)-1];
}然后,您可以使用placeItem和retreiveItem,索引从0开始。
如果您只是想将数据放置在任意位置,那么可以直接使用[]语法。
https://stackoverflow.com/questions/21789810
复制相似问题