我有一个带整数元素{1,2,3,4}的向量,我试图删除我的func方法中的最后一个元素。当我使用pop_back()和back()时它工作正常。但是当我在方法中使用迭代器时,它说最后一个元素仍然是4。
另外,如果我尝试在main方法中打印向量的最后一个元素,它仍会输出4。
如果我想在除main之外的方法中更改向量的内容,有人可以向我解释我应该怎么做吗?
我的代码:
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
答案 0 :(得分:4)
您将向量作为值传递,这意味着它已在函数中复制。如果要在函数中修改它,则需要将其作为引用(array.back() = 3
it.end() = 4
In main = 3
)或指针(func()
)传递,以便修改原始向量中的数据,而不是副本。
&
我建议在这里使用引用,因为您不必担心空指针或需要更改任何方法(使用指针,您需要更改&#39; *
&#39; void func(vector<int>& array) // reference
void func(vector<int>* array) // pointer
&#39; s。
答案 1 :(得分:0)
您需要更改将参数传递给block
,而不是通过引用而不是像这样的值:
<html>
<head>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
var grade_list = [];
var arrayA = ['foo', 'bar'];
var arrayB = [];
var form = document.getElementById('form');
number1 = document.getElementById('number1');
number2 = document.getElementById('number2');
form.onsubmit = function() {
var variable1 = number1.value;
var variable2 = number2.value;
};
arrayB[0]= variable1*0.35+variable2*0.75
arrayB[1]=100- arrayB[0] ;
for (var i=0; i<arrayA.length && i<arrayB.length; i++)
grade_list[i] = [arrayA[i], arrayB[i]];
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Pacman');
data.addColumn('number', 'Percentage');
data.addRows(grade_list);
var options = {
legend: 'yes',
pieSliceText: 'yes',
pieStartAngle: 135,
tooltip: { trigger: 'none' },
slices: {
0: { color: 'Blue' },
1: { color: 'Orange' }
}
};
var chart = new google.visualization.PieChart(document.getElementById('pacman'));
chart.draw(data, options);
}
</script>
</head>
<body>
<form id="form">
<input id="number1" type="number" min="1" name="number">
<input id="number2" type="number" min="1" name="number">
<button>Submit</button>
</form>
<div id="pacman" style="width: 600px; height: 400px;"></div>
</body>
</html>
然后输出变为:
func()
否则,您正在修改传递给#include <iostream>
#include <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;
}
的矢量副本,而不是原始矢量副本。