使用迭代器时 C++ vector 内容未更改

标签 c++ vector iterator

我有一个包含整数元素 {1,2,3,4} 的 vector ,我试图删除我的 func 方法中的最后一个元素。当我使用 pop_back() 和 back() 时它工作正常。但是当我在方法中使用迭代器时,它说最后一个元素仍然是 4。

此外,如果我尝试在我的 main 方法中打印 vector 的最后一个元素,它仍然输出 4。

如果我想在 main 以外的方法中更改 vector 的内容,有人可以向我解释我应该怎么做吗?

我的代码:

using namespace std;

void func(vector<int> array) {
    array.pop_back();    
    cout << "array.back() = " << array.back() << endl;

    vector <int>::iterator it = array.end();
    cout << "it.end() = " << (*it) << endl;
}

int main(void) {
   vector <int>  ar;
   ar.push_back(1);
   ar.push_back(2);
   ar.push_back(3);
   ar.push_back(4);
   func(ar);

   cout << "In main = " << ar.back() << endl;

   return 0;
}

输出:

array.back() = 3
it.end() = 4
In main = 4

最佳答案

您将 vector 作为值传递,这意味着它已复制到函数中。如果你想在函数中修改它,你需要将它作为引用 (&) 或指针 (*) 传递,以便原始 vector 中的数据得到修改,而不是拷贝。

void func(vector<int>& array) // reference

void func(vector<int>* array) // pointer

我建议在这里使用引用,因为您无需担心空指针或需要更改您的任何方法(使用指针您需要更改 '.'s到 '->'s).

关于使用迭代器时 C++ vector 内容未更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769292/

相关文章:

vector - Maxima:如何绘制 2D 和 3D 矢量?

c++ - 从第 n 个元素开始迭代 vector

c++ - 在哪里存储 C++ 应用程序的 SQL 代码?

c++ - 将字符串分配给数组的元素?

c++ - vector push_back 显示荒谬的结果

c++ - 如何从 C++ 函数返回数百个值?

C++ - 映射迭代器访问导致段错误

c++ - 如何从 begin() 和 end() 中实现 cbegin() 和 cend()?

c++ - 由于 Internet Explorer,VS2017 堆分析不起作用

C++ 参数应按值传递,但编译器将其视为引用