2020 이전/이것저것

vector index접근 iterator 접근

이상해C++ 2019. 1. 15. 15:04
#include 
#include  
#include  
using namespace std;;


struct AAA {
	int n;
	string str;
};
#define BIG 5000000
int main() {
	vector  v;
	for (int i = 0; i < BIG; i++) {
		AAA a = { 1, "aaa" };
		v.push_back(a);
	}

	clock_t now;
	cout << "start" << endl;
	int n = 0;
	now = clock();
	for (vector::iterator it = v.begin(); it != v.end(); ++it) {
		n += it->n;
	}
	cout << "iterator: " << clock() - now << endl;

	n = 0;
	now = clock();
	for (size_t i = 0; i < v.size(); ++i) {
		n += v[i].n;
	}
	cout << "index: " << clock() - now << endl;

	getchar();
	return n != 0;
}
결과 : 


index가 빠르다.


loop를 돌면서 아무런 동작도 안했을 때


for (vector::iterator it = v.begin(); it != v.end(); ++it) {
		;
	}
	cout << "iterator: " << clock() - now << endl;

	n = 0;
	now = clock();
	for (size_t i = 0; i < v.size(); ++i) {
		;
	}
	cout << "index: " << clock() - now << endl;

결과:

index가 빠르다

        clock_t now;
	cout << "start" << endl;
	int n = 0;
	now = clock();
	auto eit = v.end();
	for (vector::iterator it = v.begin(); it != eit; ++it) {
		;
	}
	cout << "iterator: " << clock() - now << endl;

	n = 0;
	now = clock();
	int iSize = v.size();
	for (size_t i = 0; i < iSize; ++i) {
		;
	}
	cout << "index: " << clock() - now << endl;
이건 뭘해도... index가 빠르다



어셈블리 코드를 뜯어보니까 

iterator로 멤버 접근하는거나 []로 멤버에 접근하는거나 operator -> operator []접근으로 비슷해보이는데 

순회할때의 오버헤드가 달라서 iterator가 더 시간이 걸림


rara.txt

rara1.txt


배열 for loop 순회하는 부분 어셈블리 코드 파일