【问题标题】:c++, how to change the objects of the pointersc ++,如何更改指针的对象
【发布时间】:2013-07-07 10:04:28
【问题描述】:

我对 c++ 很陌生。

我想知道有没有办法让向量的指针指向一个数组。

在我的程序中,我有指向向量的第一个和最后一个元素的向量迭代器对象,如下所示:

vector<int>::iterator vb = vec.begin();
vector<int>::iterator ve = vec.end();

我有一个名为“结果”的数组。

我想让'vb'指向'result'的第一个元素,'ve'指向'result'的最后一个元素。

我试过了:

vb = &result;
int resultLen = result.size();
ve = &(result+resultLen);

但我最终得到了这个错误:

`error: no match for ‘operator=’ in ‘vb = & result’

我尝试了一些变体,例如:

*vb = &result;
int resultLen = result.size();
*ve = &(result+resultLen);

它也没有用。

任何帮助将不胜感激,并提前感谢您!

================================================ =============================== 更新。这是我正在尝试编写的程序的简单版本。

vector<int>::iterator vb = vec1.begin(); 
vector<int>::iterator ve = vec1.end();

int arr = {1,2,3}
int result [10];

while (True) {
    subtraction (vb, ve, arr, arr+5, result); 
// let's say the vector has {1,2,3,4,5}. I am subtracting array from vector like this: 12345 - 123 until it becomes less than 123. 
        /*I now need to update the vector from which I am subtracting the array to the result array.*/
        vb = &result; //points to the first element of array
        int resultLen = result.size();
        ve = &result+resultLen; //points to the last element of array
    }

更新矢量是我遇到问题的地方。

【问题讨论】:

  • 你试图让向量迭代器以某种方式“指向”一个普通数组?
  • 不,这根本没有意义。你想达到什么目的?
  • 一些计算的结果存储在数组中,'result','vb'和've'是循环计算的输入。我需要在每次运行时更新“vb”和“ve”。我希望我清楚这一点。
  • 并非如此。请尝试发布一个简短的示例,说明您正在尝试做什么。
  • 好的。会做。我可以发布我的代码块,但这并没有真正的帮助......我将不得不发布整个程序。给我一点时间。

标签: c++ arrays pointers vector reference


【解决方案1】:

因为result 不是向量。您不能将向量的迭代器分配给数组。您只能将其分配给 int 类型向量。

【讨论】:

  • 我可以看到我正在尝试做的事情是非法的,我在问是否有解决方法来完成此操作。一些计算的结果存储在数组中,“result”和“vb”和“ve”是循环计算的输入。我需要在每次运行时更新“vb”和“ve”。我希望我清楚这一点。
【解决方案2】:

确实有可能,这是您的示例代码,经过我的简化:

std::vector<int> vec1;

vec1.push_back(1);
vec1.push_back(2);
vec1.push_back(3);

std::vector<int>::iterator vb = vec1.begin();
std::vector<int>::iterator ve = vec1.end();

int result[] = {3,2,1};
*vb = *result; //points to the first element of array
int resultLen = sizeof(result)/sizeof(result[0]);
*ve = *(result+resultLen-1); //points to the last element of array

std::cout<<vec1[0]<< " " <<vec1[1] << " " <<vec1[2] << " " <<vec1[3];

结果是:

3 2 3 1

记住你正在访问iterator::end,这意味着过去的最后一个值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2011-02-12
    • 2020-10-02
    相关资源
    最近更新 更多