c ++,如何更改指针的对象

Posted

技术标签:

【中文标题】c ++,如何更改指针的对象【英文标题】:c++, how to change the objects of the pointers 【发布时间】: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”。我希望我清楚这一点。 并非如此。请尝试发布一个简短的示例,说明您正在尝试做什么。 好的。会做。我可以发布我的代码块,但这并没有真正的帮助......我将不得不发布整个程序。给我一点时间。 【参考方案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,这意味着过去的最后一个值

【讨论】:

以上是关于c ++,如何更改指针的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何通过指针更改类成员值

如何更改指针变量的值并将更改保留在函数之外而无需通过引用传递?

如何更改会话数据并保持在同一页面上?

如何更改数据库文件的路径?

如何使用 ctypes 在 python 中查看指针值的变化

如何在Safari中更改console.log的默认行为?