如果在其他地方询问/回答了这个问题我很抱歉,但由于我不完全确定是什么/怎么问这个问题我没有找到任何答案...
我正在尝试做的是设置某种容器; list,array,vector,what-ever,这将允许我放置和删除特定索引中的对象。
这样的事情:
[empty][empty][object][empty][object][object][empty]
我将把一个向量中的对象移动到这个容器的特定索引中,并从这个容器移动到另一个向量。
最好的方式是什么,以及哪种容器最适合?我最初使用的是矢量,但内置函数似乎并没有让我足够控制对象的最终位置。无论是正面还是背面。
我需要找出保存这些“空”索引的最佳方法,并自由地将对象移入和移出每个元素。
答案 0 :(得分:1)
如果我正确理解您的问题,您希望根据特定模式将数据放入矢量中。
您可以使用简单的向量并自行实现函数来放置数据。
例如,如果您想在每隔三个位置放置数据:
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开始。
如果您只是想将数据放在任意位置,那么可以直接使用[]
语法。
答案 1 :(得分:1)
一个简单的,绝对不太理想但非常有效的解决方案可能是以下列方式使用向量:
#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;
}
如果你设法编写一个正确的拷贝赋值操作符(如果你使用C ++ 11,可能还有移动语义),它可以对你的对象进行深层复制,当然这对于你,以上可能是一个简单的工作系统,你需要做什么。
请记住调整大小(或预留差异,看看这里:https://stackoverflow.com/a/7397862/1938163)提前所需的空间。