创建一维矢量并通过参考C ++分配值

时间:2012-07-24 03:41:06

标签: c++ function vector reference dimensional

我是一名新手编写者,只需几个月的时间学习C ++。这是关于Stack Overflow的第二个问题,我真的希望答案能让我和其他人受益。

我开始研究这个程序,因为我想创建一个可以创建一维向量的向量引擎,为该1D向量中的任何位置赋值(通过抽象宽度和高度来模拟2D),然后打印出来说向量。像这样的项目的最终目标是稍后会有一个渲染引擎,它会使用SDL或等效的方法将此向量中的int值转换为屏幕上的图像切片。

我之前创建的程序可以使用每个包含字符的对象向量来执行类似的操作,但是我没有通过引用传递值,所以我真的想在此程序中通过引用来指定传递值。

代码编译得很好,assignToVector函数中的cout语句似乎表明该值正确分配。但是当我调用最终的print语句时,我想要传递给向量的值没有正确输出。我正在使用vector.erase在为其分配值之前清除位置,并使用vector.assign输入值,如果这有助于缩小问题范围。

我非常感谢任何人花时间回答这个问题!谢谢!

编辑:克里斯在下面提出的建议解决了问题的第一部分(改变 std :: cout<< printerVector [* it] TO std :: cout<< *它)。

然而,我发现我需要添加一个位置 - ;在我创建它以便对齐值之后 正常。基本上,输入的宽度和高度值与它们在网格上的实际位置不匹配。任何进一步的帮助将不胜感激!我认为这是一个与一维向量相关的问题,并将它们用作2D。

//The purpose of this program is to create a one dimensional vector of integers
//that is equal to the desired screen size.  Look at the preprocessor defines
//to change these values.
//The program also contains a function to print the created vector for testing
//purposes.
#include <iostream>  //Needed for std::cout and std::endl
#include <vector>    //Needed for std::vector and others

#define CONSOLEWIDTH  80;
#define CONSOLEHEIGHT 25;

//This function is supposed to assign a value to a specific point in the 1D vector matrix.
//The posWidth and posHeight are used to compute the location with default console values, mimicking 2D.
void assignToVector(std::vector<int>& intVector, int posWidth, int posHeight, int assignValue);

//This is mostly just a testing function to ensure that the desired
//contents are properly stored in the vector.
void printVector(std::vector<int>& printerVector);

//Creates the test vector, prints it, modifies it, and prints it again
void setupAndRun();

int main()
{
    setupAndRun();
}

void assignToVector(std::vector<int>& intVector, int posWidth, int posHeight, int assignValue)
{
    int position = posWidth + posHeight*CONSOLEWIDTH;
    //std::cout << intVector[position] << std::endl;
    std::cout << position << std::endl;
    intVector.erase(intVector.begin() + position);
    //std::cout << intVector[position] << std::endl;
    std::cout << assignValue << std::endl;
    intVector.insert(intVector.begin() + position, 1, assignValue);
    std::cout << intVector[position] << std::endl;
}

void printVector(std::vector<int>& printerVector)
{
    for(std::vector<int>::iterator it = printerVector.begin(); it != printerVector.end(); it++)
    {
        std::cout << printerVector[*it];
    }
}

void setupAndRun()
{
    int width     = CONSOLEWIDTH;
    int height    = CONSOLEHEIGHT;
    //Creates a vector of size argument1 that each have a value of argument2
    //This syntax doesn't seem to work inside classes
    std::vector<int> testVector(width*height, 8);
    //80*25 8's
    printVector(testVector);
    //Suppossed to assign 200 to the 10th position of the first row of testVector
    assignToVector(testVector, 10, 0, 200);
    //Prints out 200
    std::cout << testVector[10] << std::endl;
    //Prints out default value
    std::cout << testVector[9]  << std::endl;
    //Doesn't have a 200 in it
    printVector(testVector);
}

0 个答案:

没有答案